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