visitor_pi_pi2pi_operands.cc

Go to the documentation of this file.
00001 #include <lestes/backend_v2/intercode/visitor_pi_pi2pi_operands.g.hh>
00002 #include <lestes/backend_v2/intercode/pi.g.hh>
00003 #include <lestes/backend_v2/structs/pi_operands.g.hh>
00004 #include <lestes/md/types/tm_data_type_base.g.hh>
00005 
00006 package(lestes);
00007 package(backend_v2);
00008 package(intercode);
00009 
00010 using ::lestes::md::types::tm_data_type_base;
00011 using ::lestes::backend_v2::structs::pi_operands;
00012 
00013 typedef vector<srp<pi_operand> > pi_operand_vector__type;
00014 typedef list<srp<pi_mem> > pi_mem_list_type;
00015 typedef list<srp<pi_operand> > pi_operand_list_type;
00016 typedef vector<srp<tm_data_type_base> > tm_data_type_vector__type;
00017 typedef vector<srp<pi_sp> > pi_sp_vector__type;
00018 
00019 #define CREATE_PI_OPERANDS_LISTS()  \
00020         ptr<pi_operand_vector__type> in_ops = pi_operand_vector__type::create(); \
00021         ptr<pi_operand_vector__type> out_ops = pi_operand_vector__type::create(); \
00022         ptr<tm_data_type_vector__type> in_types = tm_data_type_vector__type::create(); \
00023         ptr<tm_data_type_vector__type> out_types = tm_data_type_vector__type::create(); \
00024         ptr<pi_sp_vector__type> jmp_targets = pi_sp_vector__type::create(); 
00025 
00026 
00027 
00028 ptr< pi_operands > visitor_pi_pi2pi_operands::tstpi_operands_get(ptr< pi_tstpi > pi) {
00029         CREATE_PI_OPERANDS_LISTS();
00030         
00031         in_ops->push_back(pi->left_get());
00032         in_types->push_back(pi->type_get());
00033         in_ops->push_back(pi->right_get());
00034         in_types->push_back(pi->type_get());
00035         
00036         out_ops->push_back(pi->destination_get());
00037         out_types->push_back(pi->type_get());
00038         
00039         return pi_operands::create(in_ops, out_ops, in_types, out_types, jmp_targets);
00040 }
00041 
00042 ptr< pi_operands > visitor_pi_pi2pi_operands::tdtpi_operands_get(ptr< pi_tdtpi > pi){
00043         CREATE_PI_OPERANDS_LISTS();
00044         
00045         in_ops->push_back(pi->left_get());
00046         in_types->push_back(pi->type2_get());
00047         in_ops->push_back(pi->right_get());
00048         in_types->push_back(pi->type2_get());
00049         
00050         out_ops->push_back(pi->destination_get());
00051         out_types->push_back(pi->type1_get());
00052         
00053         return pi_operands::create(in_ops, out_ops, in_types, out_types, jmp_targets);
00054         
00055 }
00056 
00057 ptr< pi_operands > visitor_pi_pi2pi_operands::bstpi_operands_get(ptr< pi_bstpi > pi){
00058         CREATE_PI_OPERANDS_LISTS();
00059         
00060         in_ops->push_back(pi->source_get());
00061         in_types->push_back(pi->type_get());
00062         
00063         out_ops->push_back(pi->destination_get());
00064         out_types->push_back(pi->type_get());
00065         
00066         return pi_operands::create(in_ops, out_ops, in_types, out_types, jmp_targets);
00067 }
00068 
00069 ptr< pi_operands > visitor_pi_pi2pi_operands::bdtpi_operands_get(ptr< pi_bdtpi > pi){
00070         CREATE_PI_OPERANDS_LISTS();
00071         
00072         in_ops->push_back(pi->source_get());
00073         in_types->push_back(pi->type2_get());
00074         
00075         out_ops->push_back(pi->destination_get());
00076         out_types->push_back(pi->type1_get());
00077         
00078         return pi_operands::create(in_ops, out_ops, in_types, out_types, jmp_targets);
00079 }
00080 
00081 ptr< pi_operands > visitor_pi_pi2pi_operands::st_move_operands_get(ptr< pi_abstract_move_st > pi){
00082         CREATE_PI_OPERANDS_LISTS();
00083         
00084         in_ops->push_back(pi->source_get());
00085         in_types->push_back(pi->type_get());
00086         
00087         out_ops->push_back(pi->destination_get());
00088         out_types->push_back(pi->type_get());
00089         
00090         return pi_operands::create(in_ops, out_ops, in_types, out_types, jmp_targets);
00091 }
00092 
00093 ptr< pi_operands > visitor_pi_pi2pi_operands::dt_move_operands_get(ptr< pi_abstract_move_dt > pi){
00094         CREATE_PI_OPERANDS_LISTS();
00095         
00096         in_ops->push_back(pi->source_get());
00097         in_types->push_back(pi->type2_get());
00098         
00099         out_ops->push_back(pi->destination_get());
00100         out_types->push_back(pi->type1_get());
00101         
00102         return pi_operands::create(in_ops, out_ops, in_types, out_types, jmp_targets);
00103 }
00104 
00105 ptr< pi_operands > visitor_pi_pi2pi_operands::sbp_operands_get(ptr< pi_indirect_store > pi){
00106         CREATE_PI_OPERANDS_LISTS();
00107         
00108         out_ops->push_back(pi->address_get());
00109         out_types->push_back(pi->type1_get());
00110         in_ops->push_back(pi->value_get());
00111         in_types->push_back(pi->type2_get());
00112         in_ops->push_back(pi->address_get()->factory_get().dncast<pi_mf_ptr_deref>()->addr_get());
00113         in_types->push_back(pi->address_get()->factory_get().dncast<pi_mf_ptr_deref>()->addr_get()->type_get());
00114         
00115         return pi_operands::create(in_ops, out_ops, in_types, out_types, jmp_targets);
00116 }
00117 
00118 ptr< pi_operands > visitor_pi_pi2pi_operands::lbp_operands_get(ptr< pi_indirect_load > pi){
00119         CREATE_PI_OPERANDS_LISTS();
00120         
00121         out_ops->push_back(pi->value_get());
00122         out_types->push_back(pi->type1_get());
00123         
00124         in_ops->push_back(pi->address_get());
00125         in_types->push_back(pi->type2_get());
00126         in_ops->push_back(pi->address_get()->factory_get().dncast<pi_mf_ptr_deref>()->addr_get());
00127         in_types->push_back(pi->address_get()->factory_get().dncast<pi_mf_ptr_deref>()->addr_get()->type_get());
00128         
00129         return pi_operands::create(in_ops, out_ops, in_types, out_types, jmp_targets);
00130 }
00131 
00132 ptr< pi_operands > visitor_pi_pi2pi_operands::visit_pi_sp(ptr< pi_sp >){
00133         CREATE_PI_OPERANDS_LISTS();
00134         return pi_operands::create(in_ops, out_ops, in_types, out_types, jmp_targets);
00135 }
00136 
00137 ptr< pi_operands > visitor_pi_pi2pi_operands::visit_pi_leave(ptr< pi_leave >){
00138         CREATE_PI_OPERANDS_LISTS();
00139         
00140         return pi_operands::create(in_ops, out_ops, in_types, out_types, jmp_targets);
00141 }
00142 
00143 ptr< pi_operands > visitor_pi_pi2pi_operands::visit_pi_call(ptr< pi_call > pi){
00144         CREATE_PI_OPERANDS_LISTS();
00145         
00146         pi_operand_list_type::iterator it;
00147         for(it=pi->args_get()->begin(); it!=pi->args_get()->end(); it++) {
00148                 in_ops->push_back(*it);
00149                 in_types->push_back((*it)->type_get());
00150         }
00151         
00152         if ( pi->this_arg_get() ) {
00153                 in_ops->push_back(pi->this_arg_get());
00154                 in_types->push_back(pi->this_arg_get()->type_get());
00155         }
00156         
00157         out_ops->push_back(pi->rv_get());
00158         out_types->push_back(pi->rv_get()->type_get());
00159         
00160         return pi_operands::create(in_ops, out_ops, in_types, out_types, jmp_targets);
00161 }
00162 
00163 ptr< pi_operands > visitor_pi_pi2pi_operands::visit_pi_icall(ptr< pi_icall >){
00164         lassert2(false,msg_not_implemented_yet);
00165         return pi_operands::create(NULL, NULL, NULL, NULL,NULL);
00166 }
00167 
00168 ptr< pi_operands > visitor_pi_pi2pi_operands::visit_pi_callv(ptr< pi_callv > pi){
00169         CREATE_PI_OPERANDS_LISTS();
00170         
00171         pi_operand_list_type::iterator it;
00172         for(it=pi->args_get()->begin(); it!=pi->args_get()->end(); it++) {
00173                 in_ops->push_back(*it);
00174                 in_types->push_back((*it)->type_get());
00175         }
00176         
00177         if ( pi->this_arg_get() ) {
00178                 in_ops->push_back(pi->this_arg_get());
00179                 in_types->push_back(pi->this_arg_get()->type_get());
00180         }
00181         return pi_operands::create(in_ops, out_ops, in_types, out_types, jmp_targets);
00182 }
00183 
00184 ptr< pi_operands > visitor_pi_pi2pi_operands::visit_pi_icallv(ptr< pi_icallv >){
00185         lassert2(false,msg_not_implemented_yet);
00186         return NULL;
00187 }
00188 
00189 ptr< pi_operands > visitor_pi_pi2pi_operands::cb_sl_operands_get(ptr< pi_cb_single_label_target > pi) {
00190         CREATE_PI_OPERANDS_LISTS();
00191         
00192         in_ops->push_back(pi->condition_get());
00193         in_types->push_back(pi->condition_get()->type_get());
00194         
00195         jmp_targets->push_back(pi->destination_get());
00196         
00197         return pi_operands::create(in_ops, out_ops, in_types, out_types, jmp_targets);
00198 }
00199 
00200 ptr< pi_operands > visitor_pi_pi2pi_operands::cb_sa_operands_get(ptr< pi_cb_single_address_target >) {
00201         lassert2(false,msg_not_implemented_yet);
00202         return NULL;
00203 }
00204 
00205 ptr< pi_operands > visitor_pi_pi2pi_operands::ub_sl_operands_get(ptr< pi_ub_single_label_target > pi) {
00206         CREATE_PI_OPERANDS_LISTS();
00207         
00208         jmp_targets->push_back(pi->destination_get());
00209         
00210         return pi_operands::create(in_ops, out_ops, in_types, out_types, jmp_targets);
00211 }
00212 
00213 ptr< pi_operands > visitor_pi_pi2pi_operands::ub_sa_operands_get(ptr< pi_ub_single_address_target >) {
00214         lassert2(false,msg_not_implemented_yet);
00215         return NULL;
00216 }
00217 
00218 ptr< pi_operands > visitor_pi_pi2pi_operands::bm_l_operands_get(ptr< pi_branch_multiple_label_target >) {
00219         lassert2(false,msg_not_implemented_yet);
00220         return NULL;
00221 }
00222 
00223 ptr< pi_operands > visitor_pi_pi2pi_operands::bm_a_operands_get(ptr< pi_branch_multiple_address_target >) {
00224         lassert2(false,msg_not_implemented_yet);
00225         return NULL;
00226 }
00227 
00228 end_package(intercode);
00229 end_package(backend_v2);
00230 end_package(lestes);
00231 

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