epilogue_idioms.h 804 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #pragma once
  2. #include "idiom.h"
  3. #include "icode.h"
  4. #include <deque>
  5. struct EpilogIdiom : public Idiom
  6. {
  7. protected:
  8. std::deque<iICODE> m_icodes; // deque to push_front optional icodes from popStkVars
  9. void popStkVars (iICODE pIcode);
  10. public:
  11. virtual ~EpilogIdiom() {}
  12. EpilogIdiom(Function *f) : Idiom(f)
  13. {
  14. }
  15. };
  16. struct Idiom2 : public EpilogIdiom
  17. {
  18. virtual ~Idiom2() {}
  19. Idiom2(Function *f) : EpilogIdiom(f)
  20. {
  21. }
  22. uint8_t minimum_match_length() {return 3;}
  23. bool match(iICODE pIcode);
  24. int action();
  25. };
  26. struct Idiom4 : public EpilogIdiom
  27. {
  28. protected:
  29. int m_param_count;
  30. public:
  31. virtual ~Idiom4() {}
  32. Idiom4(Function *f) : EpilogIdiom(f)
  33. {
  34. }
  35. uint8_t minimum_match_length() {return 1;}
  36. bool match(iICODE pIcode);
  37. int action();
  38. };