summaryrefslogtreecommitdiff
path: root/ghc/includes/mkNativeHdr.lc
blob: 2e2ae88c4315678447587a8faac4d7c8df5fdf87 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
%
% (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, MAIN_Dbl1)
#define OFFSET_Dbl2 OFFSET(MainRegTable, MAIN_Dbl2)
#define OFFSET_Flt1 OFFSET(MainRegTable, MAIN_Flt1)
#define OFFSET_Flt2 OFFSET(MainRegTable, MAIN_Flt2)
#define OFFSET_Flt3 OFFSET(MainRegTable, MAIN_Flt3)
#define OFFSET_Flt4 OFFSET(MainRegTable, MAIN_Flt4)
#define OFFSET_R1 OFFSET(MainRegTable, MAIN_R1)
#define OFFSET_R2 OFFSET(MainRegTable, MAIN_R2)
#define OFFSET_R3 OFFSET(MainRegTable, MAIN_R3)
#define OFFSET_R4 OFFSET(MainRegTable, MAIN_R4)
#define OFFSET_R5 OFFSET(MainRegTable, MAIN_R5)
#define OFFSET_R6 OFFSET(MainRegTable, MAIN_R6)
#define OFFSET_R7 OFFSET(MainRegTable, MAIN_R7)
#define OFFSET_R8 OFFSET(MainRegTable, MAIN_R8)
#define OFFSET_SpA OFFSET(MainRegTable, MAIN_SpA)
#define OFFSET_SuA OFFSET(MainRegTable, MAIN_SuA)
#define OFFSET_SpB OFFSET(MainRegTable, MAIN_SpB)
#define OFFSET_SuB OFFSET(MainRegTable, MAIN_SuB)
#define OFFSET_Hp OFFSET(MainRegTable, MAIN_Hp)
#define OFFSET_HpLim OFFSET(MainRegTable, MAIN_HpLim)
#define OFFSET_Tag OFFSET(MainRegTable, MAIN_Tag)
#define OFFSET_Ret OFFSET(MainRegTable, MAIN_Ret)
#define OFFSET_StkO OFFSET(MainRegTable, MAIN_StkO)
#define OFFSET_Liveness OFFSET(MainRegTable, MAIN_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);
#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}