cgutil.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #ifndef CGUTIL_H
  2. #define CGUTIL_H
  3. #include "cgcode.h"
  4. namespace CG{
  5. CGNop* nop();
  6. CGXop* xop( int op,CGReg *def,CGExp *exp );
  7. CGRem* rem( string comment );
  8. CGAti* ati( CGMem *mem );
  9. CGAtd* atd( CGMem *mem,CGSym *sym );
  10. CGMov* mov( CGExp *lhs,CGExp *rhs );
  11. CGLab* lab( CGSym *sym=0 );
  12. CGBra* bra( CGSym *sym );
  13. CGBcc* bcc( int cc,CGExp *lhs,CGExp *rhs,CGSym *sym );
  14. CGRet* ret( CGExp *exp );
  15. CGEva* eva( CGExp *exp );
  16. CGSeq* seq( const std::vector<CGStm*> &stms );
  17. CGSeq* seq( CGStm *stm0,... );
  18. CGCvt* cvt( int type,CGExp *exp );
  19. CGMem* mem( int type,CGExp *exp,int offset=0 );
  20. CGUop* uop( int op,CGExp *exp );
  21. CGBop* bop( int op,CGExp *lhs,CGExp *rhs );
  22. CGScc* scc( int cc,CGExp *lhs,CGExp *rhs );
  23. CGJsr* jsr( int type,int call_conv,CGExp *exp,const std::vector<CGExp*> &args );
  24. CGJsr* jsr( int type,int call_conv,CGExp *exp,CGExp *a0=0,CGExp *a1=0,CGExp *a2=0,CGExp *a3=0 );
  25. CGJsr* jsr( int type,string exp,const std::vector<CGExp*> &args );
  26. CGJsr* jsr( int type,string exp,CGExp *a0=0,CGExp *a1=0,CGExp *a2=0,CGExp *a3=0 );
  27. CGVfn* vfn( CGExp *exp,CGExp *self );
  28. CGEsq* esq( CGStm *lhs,CGExp *rhs );
  29. CGLea* lea( CGExp *exp );
  30. CGLit* lit( int val );
  31. CGLit* lit( int64 val );
  32. CGLit* lit( float val );
  33. CGLit* lit( double val );
  34. CGLit* lit( bstring val,int type=CG_BSTRING );
  35. CGFrm* frm();
  36. CGSym* sym();
  37. CGSym* sym( string ident,int linkage );
  38. CGDat* dat();
  39. CGDat* dat( string ident );
  40. CGTmp* tmp( int type,string ident="" );
  41. CGFun* fun( int type,int call_conv,CGSym *sym,CGExp *self );
  42. CGFun* visitFun( CGFun *fun,CGVisitor &vis );
  43. int swapcc( int cg_cc );
  44. extern CGLit *lit0,*lit1;
  45. }
  46. #endif