00001 #ifndef __hppa_pat_H__
00002 #define __hppa_pat_H__
00003 class InstructionPatterns {
00004 private:
00005 static int R0;
00006 static int RP;
00007 static int SP;
00008 static int R31;
00009 public:
00010 static Logue* std_call(CSR& csr, ADDRESS& lc, int& addr);
00011 static Logue* gcc_frame(CSR& csr, ADDRESS& lc, int& locals);
00012 static Logue* gcc_frameless(CSR& csr, ADDRESS& lc, int& locals);
00013 static Logue* param_reloc1(CSR& csr, ADDRESS& lc, int& libstub, int& locals);
00014 static Logue* gcc_unframe(CSR& csr, ADDRESS& lc);
00015 static Logue* gcc_unframeless1(CSR& csr, ADDRESS& lc);
00016 static Logue* gcc_unframeless2(CSR& csr, ADDRESS& lc);
00017 static Logue* bare_ret(CSR& csr, ADDRESS& lc);
00018 static Logue* bare_ret_anulled(CSR& csr, ADDRESS& lc);
00019 private:
00020 static bool BL$c_br_nnull(ADDRESS& lc, int& a, bool a_isVAR, int& b, bool b_isVAR);
00021 static bool BL$c_br_null(ADDRESS& lc, int& a, bool a_isVAR, int& b, bool b_isVAR);
00022 static bool BV$c_br_nnull(ADDRESS& lc, int& a, bool a_isVAR, int& b, bool b_isVAR);
00023 static bool BV$c_br_null(ADDRESS& lc, int& a, bool a_isVAR, int& b, bool b_isVAR);
00024 static bool FSTDS$s_addr_im_r$c_s_addr_ma(ADDRESS& lc, int& a, bool a_isVAR, int& b, bool b_isVAR, int& c, bool c_isVAR, int& d, bool d_isVAR);
00025 static bool LDO(ADDRESS& lc, int& a, bool a_isVAR, int& b, bool b_isVAR, int& c, bool c_isVAR);
00026 static bool LDW$l_addr_16_old$c_l_addr_none(ADDRESS& lc, int& a, bool a_isVAR, int& b, bool b_isVAR, int& c, bool c_isVAR, int& d, bool d_isVAR);
00027 static bool LDWM$l_addr_16_old$c_l_addr_none(ADDRESS& lc, int& a, bool a_isVAR, int& b, bool b_isVAR, int& c, bool c_isVAR, int& d, bool d_isVAR);
00028 static bool LDWS$s_addr_im_r$c_s_addr_mb(ADDRESS& lc, int& a, bool a_isVAR, int& b, bool b_isVAR, int& c, bool c_isVAR, int& d, bool d_isVAR);
00029 static bool LDWS$s_addr_im_r$c_s_addr_notm(ADDRESS& lc, int& a, bool a_isVAR, int& b, bool b_isVAR, int& c, bool c_isVAR, int& d, bool d_isVAR);
00030 static bool OR$c_arith_w$c_c_nonneg(ADDRESS& lc, int& a, bool a_isVAR, int& b, bool b_isVAR, int& c, bool c_isVAR, int& d, bool d_isVAR);
00031 static bool STW$l_addr_16_old$c_l_addr_none(ADDRESS& lc, int& a, bool a_isVAR, int& b, bool b_isVAR, int& c, bool c_isVAR, int& d, bool d_isVAR);
00032 static bool STWM$l_addr_16_old$c_l_addr_none(ADDRESS& lc, int& a, bool a_isVAR, int& b, bool b_isVAR, int& c, bool c_isVAR, int& d, bool d_isVAR);
00033 static bool c_arith_w$c_c_nonneg(ADDRESS& lc, int& a, bool a_isVAR);
00034 static bool c_br_nnull(ADDRESS& lc);
00035 static bool c_br_null(ADDRESS& lc);
00036 static bool c_c_nonneg(ADDRESS& lc);
00037 static bool c_l_addr_none(ADDRESS& lc);
00038 static bool c_s_addr_ma(ADDRESS& lc);
00039 static bool c_s_addr_mb(ADDRESS& lc);
00040 static bool c_s_addr_notm(ADDRESS& lc);
00041 static bool l_addr_16_old$c_l_addr_none(ADDRESS& lc, int& a, bool a_isVAR);
00042 static bool s_addr_im_r$c_s_addr_ma(ADDRESS& lc, int& a, bool a_isVAR);
00043 static bool s_addr_im_r$c_s_addr_mb(ADDRESS& lc, int& a, bool a_isVAR);
00044 static bool s_addr_im_r$c_s_addr_notm(ADDRESS& lc, int& a, bool a_isVAR);
00045 };
00046 #endif