AMPI: drop comm argument from AMPI_Comm_set_migratable and rename to AMPI_Set_migratable
[charm.git] / src / xlat-i / xi-Entry.h
blob8578d3a76477c3b52eae16d6663250653fd6ae9f
1 #ifndef _ENTRY_H
2 #define _ENTRY_H
4 #include "xi-Member.h"
5 #include "xi-SdagConstruct.h"
6 #include "xi-Template.h"
7 #include "CEntry.h"
9 using std::cerr;
11 namespace xi {
13 class Value;
14 class CStateVar;
15 // class SdagConstruct;
16 class WhenConstruct;
17 class WhenStatementEChecker;
19 /******************* Entry Point ****************/
20 // Entry attributes
21 #define STHREADED 0x01
22 #define SSYNC 0x02
23 #define SLOCKED 0x04
24 #define SPURE 0x10
25 #define SMIGRATE 0x20 //<- is magic migration constructor
26 #define SCREATEHERE 0x40 //<- is a create-here-if-nonexistant
27 #define SCREATEHOME 0x80 //<- is a create-at-home-if-nonexistant
28 #define SIMMEDIATE 0x100 //<- is a immediate
29 #define SNOKEEP 0x200
30 #define SNOTRACE 0x400
31 #define SSKIPSCHED 0x800 //<- is a message skipping charm scheduler
32 #define SPYTHON 0x1000
33 #define SINLINE 0x2000 //<- inline message
34 #define SIGET 0x4000
35 #define SLOCAL 0x8000 //<- local message
36 #define SACCEL 0x10000
37 #define SMEM 0x20000
38 #define SREDUCE 0x40000 // <- reduction target
39 #define SAPPWORK 0x80000 // <- reduction target
40 #define SAGGREGATE 0x100000
42 /* An entry construct */
43 class Entry : public Member {
44 public:
45 XStr* genClosureTypeName;
46 XStr* genClosureTypeNameProxy;
47 XStr* genClosureTypeNameProxyTemp;
48 int line,entryCount;
49 int first_line_, last_line_;
51 private:
52 int attribs;
53 Type *retType;
54 Value *stacksize;
55 const char *pythonDoc;
58 public:
59 XStr proxyName(void);
60 XStr indexName(void);
62 private:
63 // friend class CParsedFile;
64 int hasCallMarshall;
65 void genCall(XStr &dest,const XStr &preCall, bool redn_wrapper=false,
66 bool usesImplBuf = false);
68 XStr epStr(bool isForRedn = false, bool templateCall = false);
69 XStr epIdx(int fromProxy=1, bool isForRedn = false);
70 XStr epRegFn(int fromProxy=1, bool isForRedn = false);
71 XStr chareIdx(int fromProxy=1);
72 void genEpIdxDecl(XStr& str);
73 void genEpIdxDef(XStr& str);
75 void genClosure(XStr& str, bool isDef);
76 void genClosureEntryDefs(XStr& str);
77 void genClosureEntryDecls(XStr& str);
79 void genChareDecl(XStr& str);
80 void genChareStaticConstructorDecl(XStr& str);
81 void genChareStaticConstructorDefs(XStr& str);
82 void genChareDefs(XStr& str);
84 void genArrayDefs(XStr& str);
85 void genArrayStaticConstructorDecl(XStr& str);
86 void genArrayStaticConstructorDefs(XStr& str);
87 void genArrayDecl(XStr& str);
89 void genGroupDecl(XStr& str);
90 void genGroupStaticConstructorDecl(XStr& str);
91 void genGroupStaticConstructorDefs(XStr& str);
92 void genGroupDefs(XStr& str);
94 void genPythonDecls(XStr& str);
95 void genPythonDefs(XStr& str);
96 void genPythonStaticDefs(XStr& str);
97 void genPythonStaticDocs(XStr& str);
99 void genTramTypes();
100 void genTramDefs(XStr &str);
101 void genTramInstantiation(XStr &str);
103 // DMK - Accel Support
104 void genAccelFullParamList(XStr& str, int makeRefs);
105 void genAccelFullCallList(XStr& str);
106 void genAccelIndexWrapperDecl_general(XStr& str);
107 void genAccelIndexWrapperDef_general(XStr& str);
108 void genAccelIndexWrapperDecl_spe(XStr& str);
109 void genAccelIndexWrapperDef_spe(XStr& str);
110 int genAccels_spe_c_funcBodies(XStr& str);
111 void genAccels_spe_c_regFuncs(XStr& str);
112 void genAccels_ppe_c_regFuncs(XStr& str);
114 XStr aggregatorIndexType();
115 XStr dataItemType();
116 XStr tramBaseType();
117 XStr aggregatorType();
118 XStr aggregatorGlobalType(XStr& scope);
119 XStr aggregatorName();
120 XStr paramType(int withDefaultVals,int withEO=0,int useConst=1);
121 XStr paramComma(int withDefaultVals,int withEO=0);
122 XStr eo(int withDefaultVals,int priorComma=1);
123 XStr syncPreCall(void);
124 XStr syncPostCall(void);
125 XStr marshallMsg(void);
126 XStr callThread(const XStr &procName,int prependEntryName=0);
128 // SDAG support
129 std::list<CStateVar *> estateVars;
131 public:
132 XStr *label;
133 char *name;
134 TParamList *targs;
136 // SDAG support
137 SdagConstruct *sdagCon;
138 std::list<CStateVar *> stateVars;
139 CEntry *entryPtr;
140 const char *intExpr;
141 ParamList *param;
142 int isWhenEntry;
144 void addEStateVar(CStateVar *sv) {
145 estateVars.push_back(sv);
146 stateVars.push_back(sv);
149 int tramInstanceIndex;
151 // DMK - Accel Support
152 ParamList* accelParam;
153 XStr* accelCodeBody;
154 XStr* accelCallbackName;
155 void setAccelParam(ParamList* apl);
156 void setAccelCodeBody(XStr* acb);
157 void setAccelCallbackName(XStr* acbn);
159 // DMK - Accel Support
160 int accel_numScalars;
161 int accel_numArrays;
162 int accel_dmaList_numReadOnly;
163 int accel_dmaList_numReadWrite;
164 int accel_dmaList_numWriteOnly;
165 int accel_dmaList_scalarNeedsWrite;
167 Entry(int l, int a, Type *r, const char *n, ParamList *p, Value *sz=0, SdagConstruct *sc =0, const char *e=0, int fl=-1, int ll=-1);
168 void setChare(Chare *c);
169 int paramIsMarshalled(void);
170 int getStackSize(void);
171 int isThreaded(void);
172 int isSync(void);
173 int isIget(void);
174 int isConstructor(void);
175 bool isMigrationConstructor();
176 int isExclusive(void);
177 int isImmediate(void);
178 int isSkipscheduler(void);
179 int isInline(void);
180 int isLocal(void);
181 int isCreate(void);
182 int isCreateHome(void);
183 int isCreateHere(void);
184 int isPython(void);
185 int isNoTrace(void);
186 int isAppWork(void);
187 int isNoKeep(void);
188 int isSdag(void);
189 int isTramTarget(void);
191 // DMK - Accel support
192 int isAccel(void);
194 int isMemCritical(void);
195 int isReductionTarget(void);
197 void print(XStr& str);
198 void check();
199 void genIndexDecls(XStr& str);
200 void genDecls(XStr& str);
201 void genDefs(XStr& str);
202 void genReg(XStr& str);
203 XStr genRegEp(bool isForRedn = false);
204 void preprocess();
205 void preprocessSDAG();
206 char *getEntryName();
207 void generateEntryList(std::list<CEntry*>&, WhenConstruct *);
208 void collectSdagCode(SdagCollection *sc);
209 void propagateState(int);
210 void lookforCEntry(CEntry *centry);
211 int getLine();
212 void genTramRegs(XStr& str);
213 void genTramPups(XStr& scope, XStr& decls, XStr& defs);
216 // TODO(Ralf): why not simply use list<Entry*> instead?
217 class EntryList {
218 public:
219 Entry *entry;
220 EntryList *next;
221 EntryList(Entry *e,EntryList *elist=NULL):
222 entry(e), next(elist) {}
223 void generateEntryList(std::list<CEntry*>&, WhenConstruct *);
226 } // namespace xi
228 #endif // ifndef _ENTRY_H