move_generator.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__registers__move_generator_g_hh__included
00009 #define lestes__md__registers__move_generator_g_hh__included
00010 
00011 #include <lestes/std/list.hh>
00012 #include <lestes/std/set.hh>
00013 #include <lestes/md/common.hh>
00014 
00015 #include <lestes/std/objectize_macros.hh>
00016 package(lestes);
00017 package(backend_v2);
00018 package(intercode);
00019 class ge_operand;
00020 end_package(intercode);
00021 end_package(backend_v2);
00022 end_package(lestes);
00023 
00024 package(lestes);
00025 package(backend_v2);
00026 package(intercode);
00027 class ge_operand_mem;
00028 end_package(intercode);
00029 end_package(backend_v2);
00030 end_package(lestes);
00031 
00032 package(lestes);
00033 package(backend_v2);
00034 package(intercode);
00035 class ge_operand_reg;
00036 end_package(intercode);
00037 end_package(backend_v2);
00038 end_package(lestes);
00039 
00040 package(lestes);
00041 package(backend_v2);
00042 package(intercode);
00043 class ge_pi;
00044 end_package(intercode);
00045 end_package(backend_v2);
00046 end_package(lestes);
00047 
00048 package(lestes);
00049 package(md);
00050 package(instructions);
00051 class pi_pi2ge_pi_template_base;
00052 end_package(instructions);
00053 end_package(md);
00054 end_package(lestes);
00055 
00056 package(lestes);
00057 package(md);
00058 package(instructions);
00059 class instruction_group_base;
00060 end_package(instructions);
00061 end_package(md);
00062 end_package(lestes);
00063 
00064 package(lestes);
00065 package(md);
00066 package(instructions);
00067 class tm_instr_base;
00068 end_package(instructions);
00069 end_package(md);
00070 end_package(lestes);
00071 
00072 package(lestes);
00073 package(md);
00074 package(instructions);
00075 class tm_instr_op_base;
00076 end_package(instructions);
00077 end_package(md);
00078 end_package(lestes);
00079 
00080 package(lestes);
00081 package(md);
00082 package(registers);
00083 class tm_register_base;
00084 end_package(registers);
00085 end_package(md);
00086 end_package(lestes);
00087 
00088 package(lestes);
00089 package(md);
00090 package(registers);
00091 
00092 
00093 class move_generator;
00094 
00095 
00096 /*! \brief Provides way to generate ge-intercode that copies value between registers, from memory to register or from register to memory.
00097 
00098 This class is not target-machine dependent. A tempalte of copy code is acquired from field of register operand (tm_instr_op_reg class) - move_templates.
00099 */
00100 class move_generator : public ::lestes::std::object {
00101 public:
00102         ptr<vector<srp< ::lestes::backend_v2::intercode::ge_pi> > > generate_load_from_memory(ptr< ::lestes::backend_v2::intercode::ge_operand_mem > op_mem, ptr< ::lestes::backend_v2::intercode::ge_operand_reg > op_reg, ptr< ::lestes::md::registers::tm_register_base > reg);
00103 
00104         ptr<vector<srp< ::lestes::backend_v2::intercode::ge_pi> > > generate_store_to_memory(ptr< ::lestes::backend_v2::intercode::ge_operand_reg > op_reg, ptr< ::lestes::md::registers::tm_register_base > reg, ptr< ::lestes::backend_v2::intercode::ge_operand_mem > op_mem);
00105 
00106         ptr<vector<srp< ::lestes::backend_v2::intercode::ge_pi> > > generate_copy_to_register(ptr< ::lestes::backend_v2::intercode::ge_operand_reg > op_reg_src, ptr< ::lestes::md::registers::tm_register_base > reg_src, ptr< ::lestes::backend_v2::intercode::ge_operand_reg > op_reg_dst, ptr< ::lestes::md::registers::tm_register_base > reg_dst);
00107 
00108         ptr<vector<srp< ::lestes::backend_v2::intercode::ge_pi> > > generate_move(ptr< ::lestes::backend_v2::intercode::ge_operand > op_reg_src, ptr< ::lestes::md::registers::tm_register_base > reg_src, ptr< ::lestes::backend_v2::intercode::ge_operand > op_reg_dst, ptr< ::lestes::md::registers::tm_register_base > reg_dst);
00109 
00110         ptr< vector< srp< ::lestes::backend_v2::intercode::ge_pi> > > generate_ge_code(ptr< ::lestes::backend_v2::intercode::ge_operand > input_op, ptr< ::lestes::md::registers::tm_register_base > input_reg, ptr< ::lestes::backend_v2::intercode::ge_operand > output_op, ptr< ::lestes::md::registers::tm_register_base > output_reg, ptr< ::lestes::md::instructions::pi_pi2ge_pi_template_base > pat, ptr< vector< ulint > > selected_instrs, ptr< map< ulint, ulint > > selected_op_types);
00111 
00112         bool find_consistent_instructions(ptr< ::lestes::backend_v2::intercode::ge_operand > op_reg_src, ptr< ::lestes::md::registers::tm_register_base > reg_src, ptr< ::lestes::backend_v2::intercode::ge_operand > op_reg_dst, ptr< ::lestes::md::registers::tm_register_base > reg_dst, 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);
00113 
00114         bool is_instruction_consistent(ptr< ::lestes::backend_v2::intercode::ge_operand > op_reg_src, ptr< ::lestes::md::registers::tm_register_base > reg_src, ptr< ::lestes::backend_v2::intercode::ge_operand > op_reg_dst, ptr< ::lestes::md::registers::tm_register_base > reg_dst, ptr< ::lestes::md::instructions::instruction_group_base > instr_pat, ptr< ::lestes::md::instructions::tm_instr_base > instr_version, ptr< map< ulint, srp< ::lestes::md::instructions::tm_instr_op_base > > > selected_operands, ptr< map< ulint, ulint > > selected_op_types);
00115 
00116         bool is_operand_compatible1(ptr< ::lestes::md::instructions::tm_instr_op_base > instr_op, ptr< ::lestes::backend_v2::intercode::ge_operand > ge_op, ulint type, ptr< ::lestes::md::registers::tm_register_base > reg);
00117 
00118         bool is_operand_compatible2(ptr< ::lestes::md::instructions::tm_instr_op_base > op1, ptr< ::lestes::md::instructions::tm_instr_op_base > op2, ulint type);
00119 
00120         void add_selected_operands(ptr< ::lestes::backend_v2::intercode::ge_operand > input_op, ptr< ::lestes::backend_v2::intercode::ge_operand > output_op, ptr< ::lestes::md::instructions::instruction_group_base > instr_pat, ptr< ::lestes::md::instructions::tm_instr_base > instr_version, ptr< map< ulint, srp< ::lestes::md::instructions::tm_instr_op_base > > > selected_operands, ptr< map< ulint, ulint > > selected_op_types);
00121 
00122         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);
00123 
00124         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);
00125 
00126         
00127         //! First generated factory method for class move_generator.
00128         static ptr< move_generator > create (
00129                 );
00130 
00131         
00132 
00133         //! for purposes of dumping
00134         virtual ptr<reflection_list> reflection_get() const;
00135         //! for purposes of dumping
00136         virtual ptr<field_list_list> field_values_get() const;
00137         
00138 protected:
00139         //! Generated constructor for class move_generator.
00140         move_generator (
00141                 );
00142 
00143         //! Marking routine for class move_generator. 
00144         virtual void gc_mark();
00145 
00146 private:
00147         static ptr<reflection_list> reflection;
00148         
00149 }; // move_generator
00150 
00151 
00152 end_package(registers);
00153 end_package(md);
00154 end_package(lestes);
00155 
00156 #endif // lestes__md__registers__move_generator_g_hh__included

Generated on Mon Feb 12 18:22:41 2007 for lestes by doxygen 1.5.1-20070107