pi_pi2ge_pi_base.g.hh

Go to the documentation of this file.
00001 // This file is automatically generated, do not edit.
00002 
00003 /*!
00004         \file
00005         \author jaz
00006 */
00007 
00008 #ifndef lestes__md__instructions__pi_pi2ge_pi_base_g_hh__included
00009 #define lestes__md__instructions__pi_pi2ge_pi_base_g_hh__included
00010 
00011 #include <lestes/std/vector.hh>
00012 #include <lestes/md/common.hh>
00013 #include <lestes/backend_v2/intercode/pi_visitor_bases.v.g.hh>
00014 #include <lestes/backend_v2/intercode/visitor_pi_pi2pi_operands.g.hh>
00015 #include <lestes/backend_v2/intercode/visitor_pi_pi2id.g.hh>
00016 #include <lestes/backend_v2/intercode/ge.g.hh>
00017 #include <lestes/md/instructions/tm_instr_base.g.hh>
00018 #include <lestes/md/instructions/pi_operand2ge_operand.g.hh>
00019 
00020 #include <lestes/std/objectize_macros.hh>
00021 package(lestes);
00022 package(backend_v2);
00023 package(intercode);
00024 class pi_pi;
00025 end_package(intercode);
00026 end_package(backend_v2);
00027 end_package(lestes);
00028 
00029 package(lestes);
00030 package(backend_v2);
00031 package(intercode);
00032 class pi_sp;
00033 end_package(intercode);
00034 end_package(backend_v2);
00035 end_package(lestes);
00036 
00037 package(lestes);
00038 package(backend_v2);
00039 package(intercode);
00040 class pi_operand;
00041 end_package(intercode);
00042 end_package(backend_v2);
00043 end_package(lestes);
00044 
00045 package(lestes);
00046 package(backend_v2);
00047 package(intercode);
00048 class ge_operand;
00049 end_package(intercode);
00050 end_package(backend_v2);
00051 end_package(lestes);
00052 
00053 package(lestes);
00054 package(md);
00055 package(instructions);
00056 class pi_pi2ge_pi_template_base;
00057 end_package(instructions);
00058 end_package(md);
00059 end_package(lestes);
00060 
00061 package(lestes);
00062 package(md);
00063 package(instructions);
00064 class instruction_group_base;
00065 end_package(instructions);
00066 end_package(md);
00067 end_package(lestes);
00068 
00069 package(lestes);
00070 package(md);
00071 package(instructions);
00072 
00073 
00074 class pi_pi2ge_pi_base;
00075 
00076 
00077 /*! \brief Visitor that converts pi_pi instance to a corresponding list of ge_pi pseudoinstructions.
00078 
00079 Note: A concrete derived class is target dependent and it is placed in 
00080 /target/machine/${TARGET_CPU}/lestes/md/instructions/ directory. 
00081 */
00082 class pi_pi2ge_pi_base : public ::lestes::backend_v2::intercode::visitor_pi_pi2ge_pi_gen_base {
00083 public:
00084         //! The method pi_operands_getter_get returns the value of the field pi_pi2ge_pi_base::pi_operands_getter.
00085         ptr< ::lestes::backend_v2::intercode::visitor_pi_pi2pi_operands > pi_operands_getter_get() const;
00086 
00087         //! The method pi_operands_getter_set sets the field pi_pi2ge_pi_base::pi_operands_getter to the given value.
00088         void pi_operands_getter_set(const ptr< ::lestes::backend_v2::intercode::visitor_pi_pi2pi_operands > &);
00089 
00090         //! The method pi_id_getter_get returns the value of the field pi_pi2ge_pi_base::pi_id_getter.
00091         ptr< ::lestes::backend_v2::intercode::visitor_pi_pi2id > pi_id_getter_get() const;
00092 
00093         //! The method pi_id_getter_set sets the field pi_pi2ge_pi_base::pi_id_getter to the given value.
00094         void pi_id_getter_set(const ptr< ::lestes::backend_v2::intercode::visitor_pi_pi2id > &);
00095 
00096         //! The method pi_op2ge_op_convertor_get returns the value of the field pi_pi2ge_pi_base::pi_op2ge_op_convertor.
00097         ptr< ::lestes::md::instructions::pi_operand2ge_operand > pi_op2ge_op_convertor_get() const;
00098 
00099         //! The method pi_op2ge_op_convertor_set sets the field pi_pi2ge_pi_base::pi_op2ge_op_convertor to the given value.
00100         void pi_op2ge_op_convertor_set(const ptr< ::lestes::md::instructions::pi_operand2ge_operand > &);
00101 
00102         //! The method pi_sp2ge_sp_get returns the value of the field pi_pi2ge_pi_base::pi_sp2ge_sp.
00103         ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_sp >, srp< ::lestes::backend_v2::intercode::ge_sp > > > pi_sp2ge_sp_get() const;
00104 
00105         //! The method pi_sp2ge_sp_set sets the field pi_pi2ge_pi_base::pi_sp2ge_sp to the given value.
00106         void pi_sp2ge_sp_set(const ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_sp >, srp< ::lestes::backend_v2::intercode::ge_sp > > > & );
00107 
00108         //! The method pi_op2count_get returns the value of the field pi_pi2ge_pi_base::pi_op2count.
00109         ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_operand >, ulint > > pi_op2count_get() const;
00110 
00111         //! The method pi_op2count_set sets the field pi_pi2ge_pi_base::pi_op2count to the given value.
00112         void pi_op2count_set(const ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_operand >, ulint > > & );
00113 
00114         ptr< vector< srp< ::lestes::backend_v2::intercode::ge_pi> > > convert(ptr< ::lestes::backend_v2::intercode::pi_pi > pi, ptr< ::lestes::md::instructions::pi_pi2ge_pi_template_base > pat);
00115 
00116         void setup_dependencies(ptr< ::lestes::backend_v2::intercode::ge_pi > ge);
00117 
00118         ptr< vector< srp< ::lestes::backend_v2::intercode::ge_pi> > > generate_ge_code(ptr< ::lestes::backend_v2::intercode::pi_pi > pi, ptr< ::lestes::md::instructions::pi_pi2ge_pi_template_base > pat, ptr< vector< ulint > > selected_instrs, ptr< map< ulint, ulint > > selected_op_types);
00119 
00120         bool find_consistent_instructions(ptr< ::lestes::backend_v2::intercode::pi_pi > pi, ptr< ::lestes::md::instructions::pi_pi2ge_pi_template_base > pat, ptr< vector< ulint > > selected_instrs, ptr< map< ulint, srp< ::lestes::md::instructions::tm_instr_op_base > > > selected_operands, ptr< map< ulint, ulint > > selected_op_types, ulint curr_instrs_pat);
00121 
00122         bool is_instruction_consistent(ptr< ::lestes::md::instructions::instruction_group_base > instr_pat, ptr< ::lestes::md::instructions::tm_instr_base > instr_version, ptr< ::lestes::backend_v2::intercode::pi_pi > pi, ptr< map< ulint, srp< ::lestes::md::instructions::tm_instr_op_base > > > selected_operands, ptr< map< ulint, ulint > > selected_op_types);
00123 
00124         //! Function that allows target-machine dependent instruction consistency verification.
00125         virtual bool targetmachine__is_instruction_consistent(ptr< ::lestes::md::instructions::tm_instr_base > instr_version, ptr< ::lestes::backend_v2::intercode::pi_pi > pi) abstract;
00126 
00127         bool is_operand_compatible1(ptr< ::lestes::md::instructions::tm_instr_op_base > instr_op, ptr< ::lestes::backend_v2::intercode::pi_operand > pi_op, ulint type);
00128 
00129         bool is_operand_compatible2(ptr< ::lestes::md::instructions::tm_instr_op_base > op1, ptr< ::lestes::md::instructions::tm_instr_op_base > op2, ulint type);
00130 
00131         bool is_in(ptr < vector < ulint > > list, ulint value);
00132 
00133         void add_selected_operands(ptr< ::lestes::md::instructions::instruction_group_base > instr_pat, ptr< ::lestes::md::instructions::tm_instr_base > instr_version, ptr< ::lestes::backend_v2::intercode::pi_pi > pi, ptr< map< ulint, srp< ::lestes::md::instructions::tm_instr_op_base > > > selected_operands, ptr< map< ulint, ulint > > selected_op_types);
00134 
00135         void remove_selected_operands(ptr< ::lestes::md::instructions::instruction_group_base > instr_pat, ptr< map< ulint, srp< ::lestes::md::instructions::tm_instr_op_base > > > selected_operands, ptr< map< ulint, ulint > > selected_op_types);
00136 
00137         ptr< ::lestes::md::instructions::tm_instr_op_base > find_op_by_id(ptr< ::lestes::std::vector< srp< ::lestes::md::instructions::tm_instr_op_base> > > list, ulint id);
00138 
00139         
00140 
00141         //! for purposes of dumping
00142         virtual ptr<reflection_list> reflection_get() const;
00143         //! for purposes of dumping
00144         virtual ptr<field_list_list> field_values_get() const;
00145         
00146 protected:
00147         //! Generated constructor for class pi_pi2ge_pi_base.
00148         pi_pi2ge_pi_base (
00149                 ptr< ::lestes::backend_v2::intercode::visitor_pi_pi2pi_operands > a__pi_pi2ge_pi_base__pi_operands_getter,
00150                 ptr< ::lestes::backend_v2::intercode::visitor_pi_pi2id > a__pi_pi2ge_pi_base__pi_id_getter,
00151                 ptr< ::lestes::md::instructions::pi_operand2ge_operand > a__pi_pi2ge_pi_base__pi_op2ge_op_convertor,
00152                 ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_sp >, srp< ::lestes::backend_v2::intercode::ge_sp > > > a__pi_pi2ge_pi_base__pi_sp2ge_sp,
00153                 ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_operand >, ulint > > a__pi_pi2ge_pi_base__pi_op2count);
00154 
00155         //! Marking routine for class pi_pi2ge_pi_base. 
00156         virtual void gc_mark();
00157 
00158 private:
00159         //! Visitor instance that gets list of operand of given pseudoinstruction.
00160         srp< ::lestes::backend_v2::intercode::visitor_pi_pi2pi_operands > pi_operands_getter;
00161         //! Visitor instance that gets id of given pseudoinstruction.
00162         srp< ::lestes::backend_v2::intercode::visitor_pi_pi2id > pi_id_getter;
00163         //! Visitor instance that converts pi_operand to a corresponding ge_operand.
00164         srp< ::lestes::md::instructions::pi_operand2ge_operand > pi_op2ge_op_convertor;
00165         //! Map of already converted pi-sequencepoints to resulting ge-sequencepoints.
00166         srp< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_sp >, srp< ::lestes::backend_v2::intercode::ge_sp > > >  pi_sp2ge_sp;
00167         //! Usage count of pi_operands within the functions body.
00168         srp< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_operand >, ulint > >  pi_op2count;
00169         static ptr<reflection_list> reflection;
00170         
00171 }; // pi_pi2ge_pi_base
00172 
00173 
00174 end_package(instructions);
00175 end_package(md);
00176 end_package(lestes);
00177 
00178 #endif // lestes__md__instructions__pi_pi2ge_pi_base_g_hh__included

Generated on Mon Feb 12 18:23:08 2007 for lestes by doxygen 1.5.1-20070107