00001
00002
00003
00004
00005 #include <lestes/md/instructions/pi_operand2ge_operand.g.hh>
00006 #include <lestes/backend_v2/intercode/pi.g.hh>
00007 #include <lestes/backend_v2/intercode/ge.g.hh>
00008 #include <lestes/backend_v2/intercode/pi_mem_factory.g.hh>
00009
00010 package(lestes);
00011 package(md);
00012 package(instructions);
00013
00014 using namespace ::lestes::backend_v2::intercode;
00015
00016 ptr< ::lestes::backend_v2::intercode::ge_operand > pi_operand2ge_operand::visit_pi_preg(ptr< ::lestes::backend_v2::intercode::pi_preg > pi) {
00017 return ge_operand_reg::create(pi->type_get(), NULL, pi);
00018 }
00019
00020 ptr< ::lestes::backend_v2::intercode::ge_operand > pi_operand2ge_operand::visit_pi_lit(ptr< ::lestes::backend_v2::intercode::pi_lit > pi) {
00021 return ge_operand_imm::create(pi->type_get(), NULL, pi, pi->value_get());
00022 }
00023
00024 ptr< ::lestes::backend_v2::intercode::ge_operand > pi_operand2ge_operand::visit_pi_mem_decl(ptr< ::lestes::backend_v2::intercode::pi_mem_decl > pi) {
00025 return ge_operand_mem::create(pi->type_get(), NULL, pi, pi->factory_get());
00026 }
00027
00028 ptr< ::lestes::backend_v2::intercode::ge_operand > pi_operand2ge_operand::visit_pi_mem_lit(ptr< ::lestes::backend_v2::intercode::pi_mem_lit > pi){
00029 return ge_operand_mem::create(pi->type_get(), NULL, pi, pi->factory_get());
00030 }
00031
00032 ptr< ::lestes::backend_v2::intercode::ge_operand > pi_operand2ge_operand::visit_pi_mem_member(ptr< ::lestes::backend_v2::intercode::pi_mem_member > pi){
00033 return ge_operand_mem::create(pi->type_get(), NULL, pi, pi->factory_get());
00034 }
00035
00036 ptr< ::lestes::backend_v2::intercode::ge_operand > pi_operand2ge_operand::visit_pi_mem_stack(ptr< ::lestes::backend_v2::intercode::pi_mem_stack > pi){
00037 return ge_operand_mem::create(pi->type_get(), NULL, pi, pi->factory_get());
00038 }
00039
00040 ptr< ::lestes::backend_v2::intercode::ge_operand > pi_operand2ge_operand::visit_pi_mem_preg(ptr< ::lestes::backend_v2::intercode::pi_mem_preg > pi){
00041 return ge_operand_reg::create(pi->type_get(), NULL, pi);
00042 }
00043
00044 ptr< ::lestes::backend_v2::intercode::ge_operand > pi_operand2ge_operand::visit_pi_mem_temp(ptr< ::lestes::backend_v2::intercode::pi_mem_temp > pi){
00045 return ge_operand_mem::create(pi->type_get(), NULL, pi, pi->factory_get());
00046 }
00047
00048 ptr< ::lestes::backend_v2::intercode::ge_operand > pi_operand2ge_operand::visit_pi_mem_ptr_deref(ptr< ::lestes::backend_v2::intercode::pi_mem_ptr_deref > pi) {
00049 ptr<pi_mf_ptr_deref> mf = pi->factory_get().dncast<pi_mf_ptr_deref>();
00050
00051 if ( !mf->ge_addr_get() ) {
00052 mf->ge_addr_set(this->convert(mf->addr_get()).dncast<ge_operand_reg>());
00053 }
00054
00055 return ge_operand_mem::create(pi->type_get(), NULL, pi, mf);
00056 }
00057
00058 end_package(instructions);
00059 end_package(md);
00060 end_package(lestes);
00061