sparc.pat.h

Go to the documentation of this file.
00001 #ifndef __sparc_pat_H__
00002 #define __sparc_pat_H__
00003 class InstructionPatterns {
00004 private:
00005     static int SP;
00006     static int FP;
00007     static int o0;
00008     static int i0;
00009     static int i7;
00010     static int o7;
00011     static int g0;
00012 public:
00013     static Logue* std_call(CSR& csr, ADDRESS& lc, int& addr);
00014     static Logue* struct_call(CSR& csr, ADDRESS& lc, int& addr, int& imm22);
00015     static Logue* call_rst_ui_reg(CSR& csr, ADDRESS& lc, int& addr, int& imm22, int& rs1, int& rs2, int& rd);
00016     static Logue* call_rst_ui_imm(CSR& csr, ADDRESS& lc, int& addr, int& imm22, int& rs1, int& imm, int& rd);
00017     static Logue* call_restore_reg(CSR& csr, ADDRESS& lc, int& addr, int& rs1, int& rs2, int& rd);
00018     static Logue* call_restore_imm(CSR& csr, ADDRESS& lc, int& addr, int& rs1, int& imm, int& rd);
00019     static Logue* move_call_move(CSR& csr, ADDRESS& lc, int& addr, int& rd);
00020     static Logue* move_x_call_move(CSR& csr, ADDRESS& lc, int& addr, int& rd);
00021     static Logue* call_add(CSR& csr, ADDRESS& lc, int& addr, int& imm);
00022     static Logue* jmp_restore_reg(CSR& csr, ADDRESS& lc, int& rs1j, int& rdj, int& rs1, int& rs2, int& rd);
00023     static Logue* jmp_restore_imm(CSR& csr, ADDRESS& lc, int& rs1j, int& rdj, int& rs1, int& imm, int& rd);
00024     static Logue* new_reg_win(CSR& csr, ADDRESS& lc, int& locals);
00025     static Logue* same_reg_win(CSR& csr, ADDRESS& lc, int& locals);
00026     static Logue* new_reg_win_large(CSR& csr, ADDRESS& lc, int& hiVal, int& loVal, int& reg);
00027     static Logue* same_reg_win_large(CSR& csr, ADDRESS& lc, int& hiVal, int& loVal, int& reg);
00028     static Logue* none(CSR& csr, ADDRESS& lc);
00029     static Logue* std_ret(CSR& csr, ADDRESS& lc);
00030     static Logue* ret_reg_val(CSR& csr, ADDRESS& lc, int& rs1, int& rs2);
00031     static Logue* ret_imm_val(CSR& csr, ADDRESS& lc, int& rs1, int& imm);
00032     static Logue* leaf_ret(CSR& csr, ADDRESS& lc);
00033     static Logue* ret_struct4(CSR& csr, ADDRESS& lc);
00034 private:
00035     static bool ADD$imode(ADDRESS& lc, int& a, bool a_isVAR, int& b, bool b_isVAR, int& c, bool c_isVAR);
00036     static bool ADD$rmode(ADDRESS& lc, int& a, bool a_isVAR, int& b, bool b_isVAR, int& c, bool c_isVAR);
00037     static bool JMPL$dispA(ADDRESS& lc, int& a, bool a_isVAR, int& b, bool b_isVAR, int& c, bool c_isVAR);
00038     static bool JMPL$indirectA(ADDRESS& lc, int& a, bool a_isVAR, int& b, bool b_isVAR);
00039     static bool OR$imode(ADDRESS& lc, int& a, bool a_isVAR, int& b, bool b_isVAR, int& c, bool c_isVAR);
00040     static bool RESTORE$imode(ADDRESS& lc, int& a, bool a_isVAR, int& b, bool b_isVAR, int& c, bool c_isVAR);
00041     static bool RESTORE$rmode(ADDRESS& lc, int& a, bool a_isVAR, int& b, bool b_isVAR, int& c, bool c_isVAR);
00042     static bool SAVE$imode(ADDRESS& lc, int& a, bool a_isVAR, int& b, bool b_isVAR, int& c, bool c_isVAR);
00043     static bool SAVE$rmode(ADDRESS& lc, int& a, bool a_isVAR, int& b, bool b_isVAR, int& c, bool c_isVAR);
00044     static bool SUB$imode(ADDRESS& lc, int& a, bool a_isVAR, int& b, bool b_isVAR, int& c, bool c_isVAR);
00045     static bool UNIMP(ADDRESS& lc, int& a, bool a_isVAR);
00046     static bool call__(ADDRESS& lc, int& a, bool a_isVAR);
00047     static bool dispA(ADDRESS& lc, int& a, bool a_isVAR, int& b, bool b_isVAR);
00048     static bool imode(ADDRESS& lc, int& a, bool a_isVAR);
00049     static bool indirectA(ADDRESS& lc, int& a, bool a_isVAR);
00050     static bool mov_(ADDRESS& lc, int& a, bool a_isVAR, int& b, bool b_isVAR);
00051     static bool restore_(ADDRESS& lc);
00052     static bool ret(ADDRESS& lc);
00053     static bool retl(ADDRESS& lc);
00054     static bool rmode(ADDRESS& lc, int& a, bool a_isVAR);
00055     static bool sethi(ADDRESS& lc, int& a, bool a_isVAR, int& b, bool b_isVAR);
00056 };
00057 #endif

Generated on Tue Sep 19 21:18:32 2006 for Boomerang by  doxygen 1.4.6