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
1.5.1-20070107