00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _COMPILE_VEC_
00025 #define _COMPILE_VEC_
00026
00027 #include "compile.hh"
00028
00030
00033
00034
00035 class VectorCompiler : public Compiler
00036 {
00037 private:
00038 Tree fCompileScalKey[4];
00039 Tree fCompileScalarVecKey[4];
00040 Tree fCompileVecKey;
00041
00042 Tree fSharingKeyScal;
00043 Tree fSharingKeyVec;
00044 Tree fSharingKeyTrueScal;
00045
00046
00047
00048 Tree fIDKey;
00049 Tree fRDTblGenerate;
00050 map<string, int> fIDCounters;
00051
00052 map<string, int> rec_var_map;
00053
00054 int loop_unroll;
00055
00056
00057 public:
00058 VectorCompiler ( const string& name, const string& super, int numInputs, int numOutputs) : Compiler(name,super,numInputs,numOutputs,true),
00059 loop_unroll(0)
00060 {
00061 fCompileScalKey[0] = fCompileScalKey[1] = fCompileScalKey[2] = fCompileScalKey[3] = nil;
00062 fCompileScalarVecKey[0] = fCompileScalarVecKey[1] = fCompileScalarVecKey[2] = fCompileScalarVecKey[3] = nil;
00063 fCompileVecKey = nil;
00064
00065 fSharingKeyScal = nil;
00066 fSharingKeyVec = nil;
00067 fSharingKeyTrueScal = nil;
00068
00069
00070 fIDKey = nil;
00071 fRDTblGenerate = nil;
00072
00073 }
00074 VectorCompiler ( Klass* k) : Compiler(k),loop_unroll(0)
00075 {
00076 fCompileScalKey[0] = fCompileScalKey[1] = fCompileScalKey[2] = fCompileScalKey[3] = nil;
00077 fCompileScalarVecKey[0] = fCompileScalarVecKey[1] = fCompileScalarVecKey[2] = fCompileScalarVecKey[3] = nil;
00078 fCompileVecKey = nil;
00079
00080 fSharingKeyScal = nil;
00081 fSharingKeyVec = nil;
00082 fSharingKeyTrueScal = nil;
00083
00084
00085 fIDKey = nil;
00086 fRDTblGenerate = nil;
00087 }
00088
00089 virtual void compileMultiSignal (Tree lsig);
00090 virtual void compileSingleSignal (Tree lsig);
00091 virtual string CS (Tree tEnv, Tree sig, int ctxt);
00092 virtual string generateCacheCode(Tree tEnv,Tree sig, const string& exp, int context) ;
00093
00094 private:
00095 string getFreshID (const char* prefix);
00096 Tree makeCompileKey(Tree t, int unroll);
00097 void compilePreparedSignalList (Tree lsig);
00098 Tree prepare(Tree L0);
00099
00100
00101
00102 int getSharingCount(Tree t, int ctxt);
00103 void sharingAnalysis(Tree t);
00104 void sharingAnnotation(int vctxt, Tree t, int ctxt);
00105
00106
00107
00108
00109
00110 bool DynamicCasting(Tree env, int nature_sig, int nature_arg1, int nature_arg2, Tree arg1, Tree arg2, string* cast_arg1, string* cast_arg2);
00111 bool TrinaryOperationAccVec(Tree env, Tree arg1,Tree arg2,string* result);
00112 bool TrinaryOperationAccScal(Tree env, Tree arg1,Tree arg2,string* result);
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123 string generateVec(Tree tEnv,Tree sig);
00124 string generateScalarVec(Tree tEnv,Tree sig);
00125 string generateScal(Tree tEnv,Tree sig);
00126
00127
00128 string generateInput (Tree tEnv,Tree sig, const string& idx, int context) ;
00129 string generateOutput(Tree tEnv,Tree sig, const string& idx, Tree arg, int context) ;
00130
00131 string generateBinOp (Tree tEnv,Tree sig, int opcode, Tree arg1, Tree arg2, int context) ;
00132
00133 string generateDelay1(Tree tEnv,Tree sig, Tree arg, int context) ;
00134
00135 string generateSelect2(Tree tEnv,Tree sig, Tree selector, Tree s1, Tree s2, int context);
00136
00137
00138 string generateFFun (Tree tEnv,Tree sig, Tree ff, Tree largs) ;
00139
00140
00141 string generateRecProj (Tree tEnv,Tree sig, const string& vname, int i) ;
00142 string generateRecRef (Tree tEnv,Tree sig, Tree label) ;
00143 string generateRecGroup (Tree tEnv,Tree sig, Tree label, Tree le) ;
00144
00145 bool heuristiqueRec (Tree tEnv,Tree sig, string* result) ;
00146
00147 string generateTable (Tree tEnv,Tree sig, Tree tsize, Tree content) ;
00148 string generateSigGen(Tree tEnv,Tree sig, Tree content) ;
00149
00150 string generateWRTbl (Tree tEnv,Tree sig, Tree tbl, Tree idx, Tree data) ;
00151 string generateRDTbl (Tree tEnv,Tree sig, Tree tbl, Tree idx) ;
00152
00153
00154
00155 string generateIntCast (Tree tEnv,Tree sig, Tree x, int context) ;
00156 string generateFloatCast (Tree tEnv,Tree sig, Tree x, int context) ;
00157
00158 string generateButton (Tree tEnv,Tree sig, Tree label) ;
00159 string generateCheckbox (Tree tEnv,Tree sig, Tree label) ;
00160 string generateVSlider (Tree tEnv,Tree sig, Tree label, Tree cur, Tree min, Tree max, Tree step) ;
00161 string generateHSlider (Tree tEnv,Tree sig, Tree label, Tree cur, Tree min, Tree max, Tree step) ;
00162 string generateNumEntry (Tree tEnv,Tree sig, Tree label, Tree cur, Tree min, Tree max, Tree step) ;
00163 };
00164
00165
00166 #endif