copy_constructor_call_generator.cc

Go to the documentation of this file.
00001 /*!
00002         \file
00003         \author jaz
00004 */
00005 
00006 #include <lestes/backend_v2/intercode/ge.g.hh>
00007 #include <lestes/backend_v2/intercode/pi.g.hh>
00008 #include <lestes/md/types/copy_constructor_call_generator.g.hh>
00009 #include <lestes/md/instructions/tm_instr.g.hh>
00010 
00011 package(lestes);
00012 package(md);
00013 package(types);
00014 
00015 using namespace ::lestes::backend_v2::intercode;
00016 using namespace ::lestes::md::instructions;
00017 
00018 typedef vector< srp < ge_operand > > ge_operand_vector__type;
00019 typedef vector< srp < ge_pi > > ge_pi_vector__type;
00020 
00021 /*!
00022         \brief Returns instance.
00023 */
00024 ptr<copy_constructor_call_generator> copy_constructor_call_generator::instance() {
00025         if ( !singleton_instance_get() ) {
00026                 singleton_instance_set(copy_constructor_call_generator::create());
00027         }
00028         return singleton_instance_get();
00029 }
00030 
00031 
00032 ptr<ge_operand> copy_constructor_call_generator::generate_copy(ptr<ge_operand > op, ptr<vector<srp<ge_pi> > > copy_code) {
00033         ptr<ge_operand_reg> op_res;
00034         
00035         switch (op->kind_get()) {
00036                 case ge_operand::REGISTER: {
00037                         ptr<tm_instr> tm = tm_instr::instance(INSTRUCTION_MOV__1);
00038                         ptr<ge_pi> ge = ge_pi::create(tm,NULL);
00039                         
00040                         op_res = ge_operand_reg::create(op->type_get(),ge,NULL);
00041                         
00042                         ge->operands_input_get()->push_back(op);
00043                         ge->operands_output_get()->push_back(op_res);
00044                         
00045                         copy_code->push_back(ge);
00046                 } break;
00047                 
00048                 case ge_operand::MEMORY: {
00049                         lassert(false);
00050                 } break;
00051                 
00052                 case ge_operand::IMMEDIATE: {
00053                         lassert(false);
00054                 } break;
00055         }
00056         
00057         return op_res;
00058 }
00059 
00060 end_package(types);
00061 end_package(md);
00062 end_package(lestes);
00063 

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