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_SCAL_
00025 #define _COMPILE_SCAL_
00026
00027 #include "compile.hh"
00028 #include "sigtyperules.hh"
00029 #include "sigtyperules.hh"
00030 #include "occurences.hh"
00031 #include "property.hh"
00032
00034
00037
00038
00039 class ScalarCompiler : public Compiler
00040 {
00041 private:
00042
00043
00044 property<string> fCompileProperty;
00045 property<string> fVectorProperty;
00046
00047 static map<string, int> fIDCounters;
00048 Tree fSharingKey;
00049 OccMarkup fOccMarkup;
00050 bool fHasIota;
00051
00052
00053 public:
00054
00055 ScalarCompiler ( const string& name, const string& super, int numInputs, int numOutputs) :
00056 Compiler(name,super,numInputs,numOutputs,false),
00057 fHasIota(false)
00058 {}
00059
00060 ScalarCompiler ( Klass* k) : Compiler(k)
00061 {}
00062
00063 virtual void compileMultiSignal (Tree lsig);
00064 virtual void compileSingleSignal (Tree lsig);
00065 virtual string CS (Tree sig);
00066 virtual string generateCacheCode(Tree sig, const string& exp) ;
00067 string generateVariableStore(Tree sig, const string& exp);
00068
00069
00070 private:
00071
00072 string getFreshID (const string& prefix);
00073
00074 void compilePreparedSignalList (Tree lsig);
00075 Tree prepare(Tree L0);
00076 Tree prepare2 (Tree L0);
00077
00078
00079 bool getCompiledExpression(Tree sig, string& name);
00080 string setCompiledExpression(Tree sig, const string& name);
00081
00082 void setVectorNameProperty(Tree sig, const string& vecname);
00083 bool getVectorNameProperty(Tree sig, string& vecname);
00084
00085 int getSharingCount(Tree t);
00086 void setSharingCount(Tree t, int count);
00087 void sharingAnalysis(Tree t);
00088 void sharingAnnotation(int vctxt, Tree t);
00089
00090
00091
00092 string generateCode (Tree sig);
00093
00094 string generateXtended (Tree sig);
00095 string generateFixDelay (Tree sig, Tree arg, Tree size);
00096 string generatePrefix (Tree sig, Tree x, Tree e);
00097 string generateIota (Tree sig, Tree arg);
00098 string generateBinOp (Tree sig, int opcode, Tree arg1, Tree arg2);
00099
00100 string generateFFun (Tree sig, Tree ff, Tree largs);
00101
00102 string generateInput (Tree sig, const string& idx);
00103 string generateOutput (Tree sig, const string& idx, const string& arg1);
00104
00105 string generateTable (Tree sig, Tree tsize, Tree content);
00106 string generateStaticTable (Tree sig, Tree tsize, Tree content);
00107 string generateWRTbl (Tree sig, Tree tbl, Tree idx, Tree data);
00108 string generateRDTbl (Tree sig, Tree tbl, Tree idx);
00109 string generateSigGen (Tree sig, Tree content);
00110 string generateStaticSigGen(Tree sig, Tree content);
00111
00112 string generateSelect2 (Tree sig, Tree sel, Tree s1, Tree s2);
00113 string generateSelect3 (Tree sig, Tree sel, Tree s1, Tree s2, Tree s3);
00114
00115 string generateRecProj (Tree sig, Tree exp, int i);
00116 void generateRec (Tree sig, Tree var, Tree le);
00117
00118 string generateIntCast (Tree sig, Tree x);
00119 string generateFloatCast (Tree sig, Tree x);
00120
00121 string generateButton (Tree sig, Tree label);
00122 string generateCheckbox (Tree sig, Tree label);
00123 string generateVSlider (Tree sig, Tree label, Tree cur, Tree min, Tree max, Tree step);
00124 string generateHSlider (Tree sig, Tree label, Tree cur, Tree min, Tree max, Tree step);
00125 string generateNumEntry (Tree sig, Tree label, Tree cur, Tree min, Tree max, Tree step);
00126
00127 string generateVBargraph (Tree sig, Tree label, Tree min, Tree max, const string& exp);
00128 string generateHBargraph (Tree sig, Tree label, Tree min, Tree max, const string& exp);
00129
00130 string generateNumber(Tree sig, const string& exp);
00131 string generateFConst (Tree sig, const string& file, const string& name);
00132 string generateFVar (Tree sig, const string& file, const string& name);
00133
00134 string generateDelayVec(Tree sig, const string& exp, const string& ctype, const string& vname, int mxd);
00135 string generateDelayVecNoTemp(Tree sig, const string& exp, const string& ctype, const string& vname, int mxd);
00136
00137 void generateDelayLine(const string& ctype, const string& vname, int mxd, const string& exp);
00138
00139 void getTypedNames(Type t, const string& prefix, string& ctype, string& vname);
00140 void ensureIotaCode();
00141
00142
00143 };
00144
00145 #endif