Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /sml/trunk/src/runtime/config/gen-offsets.c
ViewVC logotype

Annotation of /sml/trunk/src/runtime/config/gen-offsets.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2 - (view) (download) (as text)

1 : monnier 2 /* gen-offsets.c
2 :     *
3 :     * COPYRIGHT (c) 1992 by AT&T Bell Laboratories.
4 :     *
5 :     * This C program generates a header file for the *.prim.asm files,
6 :     * which gives the offset values in the VProc and ML state vectors.
7 :     */
8 :    
9 :     #include "ml-base.h"
10 :     #include "vproc-state.h"
11 :     #include "ml-state.h"
12 :     #include "gen.h"
13 :    
14 :     #define MOFFSET(fld) (((Addr_t)&(M.s.fld)) - (Addr_t)&(M.b[0]))
15 :     #define VOFFSET(fld) (((Addr_t)&(V.s.fld)) - (Addr_t)&(V.b[0]))
16 :    
17 :     #define PVOFFSET(sym, fld) \
18 :     fprintf(f, "#define %sOffVSP %d\n", (sym), VOFFSET(fld))
19 :     #define PMOFFSET(sym, fld) \
20 :     fprintf(f, "#define %sOffMSP %d\n", (sym), MOFFSET(fld))
21 :    
22 :     #if defined(TARGET_HPPA)
23 :     # define PROOT(sym, index) \
24 :     fprintf(f, "#define %sOffMSP RootsOffMSP+%d\n", (sym), WORD_SZB*index)
25 :     #else
26 :     # define PROOT(sym, index) \
27 :     fprintf(f, "#define %sOffMSP (RootsOffMSP+%d)\n", (sym), WORD_SZB*index)
28 :     #endif
29 :    
30 :     main ()
31 :     {
32 :     union {
33 :     vproc_state_t s;
34 :     char b[sizeof(vproc_state_t)];
35 :     } V;
36 :     union {
37 :     ml_state_t s;
38 :     char b[sizeof(ml_state_t)];
39 :     } M;
40 :     int i;
41 :     FILE *f;
42 :    
43 :     /* check to make sure that the ml_roots array is 8-byte aligned */
44 :     if ((MOFFSET(ml_roots[0]) & 7) != 0) {
45 :     fprintf (stderr, "Error: ml_roots not 8-byte aligned\n");
46 :     exit (1);
47 :     }
48 :    
49 :     f = OpenFile ("mlstate-offsets.h", "_MLSTATE_OFFSETS_");
50 :    
51 :     #if TARGET_BYTECODE
52 :     fprintf (f, "/* TARGET_BYTECODE */\n");
53 :     #else
54 :     PMOFFSET("VProc", ml_vproc);
55 :     PMOFFSET("AllocPtr", ml_allocPtr);
56 :     PMOFFSET("LimitPtr", ml_limitPtr);
57 :     PMOFFSET("StorePtr", ml_storePtr);
58 :     PMOFFSET("Roots", ml_roots[0]);
59 :     PROOT("PC", PC_INDX);
60 :     PROOT("StdArg", ARG_INDX);
61 :     PROOT("StdCont", CONT_INDX);
62 :     PROOT("StdClos", CLOSURE_INDX);
63 :     PROOT("ExnPtr", EXN_INDX);
64 :     #ifdef BASE_INDX
65 :     PROOT("BasePtr", BASE_INDX);
66 :     #endif
67 :     PROOT("VarPtr", VAR_INDX);
68 :     PROOT("LinkReg", LINK_INDX);
69 :     #ifdef MISC0_INDX
70 :     # if defined(TARGET_HPPA)
71 :     fprintf(f, "#define MiscRegOffMSP(i) %d+(%d*(i))\n",
72 :     ((Addr_t)&(M.s.ml_roots[MISC0_INDX])) - (Addr_t)&(M.b[0]),
73 :     WORD_SZB);
74 :     # else
75 :     fprintf(f, "#define MiscRegOffMSP(i) (%d+(%d*(i)))\n",
76 :     ((Addr_t)&(M.s.ml_roots[MISC0_INDX])) - (Addr_t)&(M.b[0]),
77 :     WORD_SZB);
78 :     # endif
79 :     #endif
80 :     #ifdef N_PSEUDO_REGS
81 :     for (i = 0; i < N_PSEUDO_REGS; i++) {
82 :     char buf[32];
83 :     sprintf (buf, "PseudoReg%d", i+1);
84 :     PMOFFSET(buf, ml_pseudoRegs[i]);
85 :     }
86 :     #endif
87 :     #ifdef ICOUNT
88 :     PMOFFSET("ICountRef", ml_icountReg);
89 :     #endif
90 :     PMOFFSET("Mask", ml_liveRegMask);
91 :     #ifdef SOFT_POLL
92 :     PMOFFSET("RealLimit", ml_realLimit);
93 :     PMOFFSET("PollPending", ml_pollPending);
94 :     PMOFFSET("InPollHandler", ml_inPollHandler);
95 :     #endif
96 :     PVOFFSET("InML", vp_inMLFlag);
97 :     PVOFFSET("HandlerPending", vp_handlerPending);
98 :     PVOFFSET("InSigHandler", vp_inSigHandler);
99 :     PVOFFSET("NPendingSys", vp_numPendingSysSigs);
100 :     PVOFFSET("NPending", vp_numPendingSigs);
101 :     #endif /* !BYTECODE */
102 :    
103 :     CloseFile (f, "_MLSTATE_OFFSETS_");
104 :    
105 :     exit (0);
106 :     }

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0