00001
00002
00003
00004
00005
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
00078
00079
00080
00081
00082 class pi_pi2ge_pi_base : public ::lestes::backend_v2::intercode::visitor_pi_pi2ge_pi_gen_base {
00083 public:
00084
00085 ptr< ::lestes::backend_v2::intercode::visitor_pi_pi2pi_operands > pi_operands_getter_get() const;
00086
00087
00088 void pi_operands_getter_set(const ptr< ::lestes::backend_v2::intercode::visitor_pi_pi2pi_operands > &);
00089
00090
00091 ptr< ::lestes::backend_v2::intercode::visitor_pi_pi2id > pi_id_getter_get() const;
00092
00093
00094 void pi_id_getter_set(const ptr< ::lestes::backend_v2::intercode::visitor_pi_pi2id > &);
00095
00096
00097 ptr< ::lestes::md::instructions::pi_operand2ge_operand > pi_op2ge_op_convertor_get() const;
00098
00099
00100 void pi_op2ge_op_convertor_set(const ptr< ::lestes::md::instructions::pi_operand2ge_operand > &);
00101
00102
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
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
00109 ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_operand >, ulint > > pi_op2count_get() const;
00110
00111
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
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
00142 virtual ptr<reflection_list> reflection_get() const;
00143
00144 virtual ptr<field_list_list> field_values_get() const;
00145
00146 protected:
00147
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
00156 virtual void gc_mark();
00157
00158 private:
00159
00160 srp< ::lestes::backend_v2::intercode::visitor_pi_pi2pi_operands > pi_operands_getter;
00161
00162 srp< ::lestes::backend_v2::intercode::visitor_pi_pi2id > pi_id_getter;
00163
00164 srp< ::lestes::md::instructions::pi_operand2ge_operand > pi_op2ge_op_convertor;
00165
00166 srp< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_sp >, srp< ::lestes::backend_v2::intercode::ge_sp > > > pi_sp2ge_sp;
00167
00168 srp< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_operand >, ulint > > pi_op2count;
00169 static ptr<reflection_list> reflection;
00170
00171 };
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