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