lestes::backend_v2::intercode::visitor_ge_operand2asm Class Reference

Visitor that generates output asm code for ge_operand. More...

#include <visitor_ge_operand2asm.g.hh>

Inheritance diagram for lestes::backend_v2::intercode::visitor_ge_operand2asm:

lestes::backend_v2::intercode::visitor_ge_operand2lstring_gen_base lestes::std::visitor_base lestes::std::object lestes::std::mem::keystone List of all members.

Public Member Functions

ptr< ::lestes::backend_v2::intercode::ge_piinstruction_get () const
 The method instruction_get returns the value of the field visitor_ge_operand2asm::instruction.
void instruction_set (const ptr< ::lestes::backend_v2::intercode::ge_pi > &)
 The method instruction_set sets the field visitor_ge_operand2asm::instruction to the given value.
virtual lstring visit_ge_operand_reg (ptr< ::lestes::backend_v2::intercode::ge_operand_reg >)
virtual lstring visit_ge_operand_mem (ptr< ::lestes::backend_v2::intercode::ge_operand_mem >)
virtual lstring visit_ge_operand_imm (ptr< ::lestes::backend_v2::intercode::ge_operand_imm >)
virtual ptr< reflection_listreflection_get () const
 for purposes of dumping
virtual ptr< field_list_listfield_values_get () const
 for purposes of dumping

Static Public Member Functions

static ptr< visitor_ge_operand2asmcreate (ptr< ::lestes::backend_v2::intercode::ge_pi > a__visitor_ge_operand2asm__instruction)
 First generated factory method for class visitor_ge_operand2asm.
static ptr< visitor_ge_operand2asmcreate ()
 Second generated factory method for class visitor_ge_operand2asm.

Protected Member Functions

 visitor_ge_operand2asm (ptr< ::lestes::backend_v2::intercode::ge_pi > a__visitor_ge_operand2asm__instruction)
 Generated constructor for class visitor_ge_operand2asm.
virtual void gc_mark ()
 Marking routine for class visitor_ge_operand2asm.

Private Attributes

srp< ::lestes::backend_v2::intercode::ge_piinstruction
 A pseudoinstruction that uses the operand.

Static Private Attributes

static ptr< reflection_listreflection = reflection

Detailed Description

Visitor that generates output asm code for ge_operand.

Definition at line 32 of file visitor_ge_operand2asm.g.hh.


Constructor & Destructor Documentation

lestes::backend_v2::intercode::visitor_ge_operand2asm::visitor_ge_operand2asm ( ptr< ::lestes::backend_v2::intercode::ge_pi a__visitor_ge_operand2asm__instruction  )  [protected]

Generated constructor for class visitor_ge_operand2asm.

Generated constructor for class visitor_ge_operand2asm.

Author:
lsg

Definition at line 63 of file visitor_ge_operand2asm.g.cc.

Referenced by create().

00064         : visitor_ge_operand2lstring_gen_base(), instruction(a__visitor_ge_operand2asm__instruction)
00065 {}


Member Function Documentation

ptr<::lestes::backend_v2::intercode::ge_pi > lestes::backend_v2::intercode::visitor_ge_operand2asm::instruction_get (  )  const

The method instruction_get returns the value of the field visitor_ge_operand2asm::instruction.

Returns:
The value of visitor_ge_operand2asm::instruction.
Author:
lsg

Definition at line 27 of file visitor_ge_operand2asm.g.cc.

References instruction.

00028 {
00029         return instruction;
00030 }

void lestes::backend_v2::intercode::visitor_ge_operand2asm::instruction_set ( const ptr< ::lestes::backend_v2::intercode::ge_pi > &  x  ) 

The method instruction_set sets the field visitor_ge_operand2asm::instruction to the given value.

Parameters:
[in] x The new value to set visitor_ge_operand2asm::instruction to.
Author:
lsg

Definition at line 36 of file visitor_ge_operand2asm.g.cc.

References instruction.

00037 {
00038         visitor_ge_operand2asm::instruction = x;
00039 }

lstring lestes::backend_v2::intercode::visitor_ge_operand2asm::visit_ge_operand_reg ( ptr< ::lestes::backend_v2::intercode::ge_operand_reg  )  [virtual]

Implements lestes::backend_v2::intercode::visitor_ge_operand2lstring_gen_base.

Definition at line 31 of file visitor_ge_operand2asm.cc.

References lestes::ui::code, and instruction.

00031                                                                                                       {
00032         lstring code;   
00033         
00034         ge_pi2reg__type::iterator it = ge->assigned_registers_get()->find(instruction);
00035         
00036         if ( it!=ge->assigned_registers_get()->end() ) {
00037                 code = tm_register::instance((tm_register_base::id_type)it->second)->asm_output_get();
00038         } else {
00039                 ::std::ostringstream oss;
00040                 oss << ge->uid_get();
00041                 code = "!NO_REG(ge_operand_reg=" + oss.str() + ")";
00042         }
00043         
00044         return code;
00045 }

lstring lestes::backend_v2::intercode::visitor_ge_operand2asm::visit_ge_operand_mem ( ptr< ::lestes::backend_v2::intercode::ge_operand_mem  )  [virtual]

Implements lestes::backend_v2::intercode::visitor_ge_operand2lstring_gen_base.

Definition at line 47 of file visitor_ge_operand2asm.cc.

References lestes::ui::code, lassert, lestes::backend_v2::intercode::pi_mem_factory::MF_DECL, lestes::backend_v2::intercode::pi_mem_factory::MF_LIT, lestes::backend_v2::intercode::pi_mem_factory::MF_PTR_DEREF, lestes::backend_v2::intercode::pi_mem_factory::MF_STACK, and lestes::md::string_replace().

00047                                                                                                       {
00048         ptr<pi_mem_factory> factory = ge->factory_get();
00049         
00050         lstring code;
00051 
00052         switch (factory->kind_get()) {
00053                 case pi_mem_factory::MF_DECL: {
00054                         ptr<pi_mf_decl> mf = factory.dncast<pi_mf_decl>();
00055         
00056                         //Get id of the global declaration.
00057                         lstring id = name_mangler::instance()->mangle(mf->decl_get());
00058 
00059                         code = tm_asm::ent_global_mem_address_get();
00060                         code = string_replace(code, "$address", id);
00061                 } break;                
00062                 
00063                 case pi_mem_factory::MF_LIT: {
00064                         ptr<pi_lit> lit = factory.dncast<pi_mf_lit>()->lit_get();
00065         
00066                         ptr<literal_loader> loader = literal_loader::instance();
00067         
00068                         //Get id of literal.
00069                         lstring id = loader->get_id_for_managed_literal(lit);
00070                         lassert(!id.empty());   
00071         
00072                         code = tm_asm::ent_global_mem_address_get();
00073                         code = string_replace(code, "$address", id);
00074                 } break;                
00075                 
00076                 case pi_mem_factory::MF_STACK: {
00077                         ptr<pi_mf_stack> mf =factory.dncast<pi_mf_stack>();
00078         
00079                         //Get stack offset.
00080                         t_ssize offset = mf->offset_get();
00081                         lassert(!(offset%32));
00082         
00083                         code = tm_asm::ent_stack_address_get();
00084         
00085                         ::std::ostringstream oss;
00086                         if ( offset >= 0 ) {
00087                                 oss << "+";
00088                         }
00089         
00090                         oss << offset/8;
00091         
00092                         code = string_replace(code, "$offset", oss.str());
00093                 } break;
00094                         
00095                 case pi_mem_factory::MF_PTR_DEREF: {
00096                         ptr<pi_mf_ptr_deref> mf = factory.dncast<pi_mf_ptr_deref>();
00097         
00098                         //Get id of register holding address to be dereferenced.
00099                         lstring reg_id = mf->ge_addr_get()->accept_visitor_ge_operand2lstring_gen_base(this);
00100 
00101                         code = reg_id;
00102                 } break;
00103                 
00104                 default: lassert(false);                                                                        
00105         }
00106         
00107         return  " [" + code + "]";
00108 }

lstring lestes::backend_v2::intercode::visitor_ge_operand2asm::visit_ge_operand_imm ( ptr< ::lestes::backend_v2::intercode::ge_operand_imm  )  [virtual]

Implements lestes::backend_v2::intercode::visitor_ge_operand2lstring_gen_base.

Definition at line 110 of file visitor_ge_operand2asm.cc.

00110                                                                                                       {
00111         return ge->value_get()->get_asm_definition_val();
00112 }

ptr< visitor_ge_operand2asm > lestes::backend_v2::intercode::visitor_ge_operand2asm::create ( ptr< ::lestes::backend_v2::intercode::ge_pi a__visitor_ge_operand2asm__instruction  )  [static]

First generated factory method for class visitor_ge_operand2asm.

This factory method for class visitor_ge_operand2asm takes values of all fields as arguments.

Author:
lsg

Definition at line 45 of file visitor_ge_operand2asm.g.cc.

References visitor_ge_operand2asm().

00046 {
00047         return ptr< visitor_ge_operand2asm > ( new visitor_ge_operand2asm(a__visitor_ge_operand2asm__instruction) );
00048 }

ptr< visitor_ge_operand2asm > lestes::backend_v2::intercode::visitor_ge_operand2asm::create (  )  [static]

Second generated factory method for class visitor_ge_operand2asm.

This factory method for class visitor_ge_operand2asm uses initializers.

Author:
lsg

Definition at line 54 of file visitor_ge_operand2asm.g.cc.

References visitor_ge_operand2asm().

00055 {
00056         return ptr< visitor_ge_operand2asm > ( new visitor_ge_operand2asm(NULL) );
00057 }

ptr< object::reflection_list > lestes::backend_v2::intercode::visitor_ge_operand2asm::reflection_get (  )  const [virtual]

for purposes of dumping

Reimplemented from lestes::backend_v2::intercode::visitor_ge_operand2lstring_gen_base.

Definition at line 67 of file visitor_ge_operand2asm.g.cc.

References lestes::std::list< T >::create(), reflection, and lestes::backend_v2::intercode::visitor_ge_operand2lstring_gen_base::reflection_get().

00068 {
00069         if (!reflection) {
00070                 typedef class_reflection::field_metadata md;
00071                 typedef class_reflection::field_metadata_list mdlist;
00072                 ptr<mdlist> mdl = mdlist::create();
00073                 mdl->push_back( md::create( "instruction", "ge_pi" ) );
00074                 reflection = reflection_list::create( visitor_ge_operand2lstring_gen_base::reflection_get() );
00075                 reflection->push_back( class_reflection::create( "visitor_ge_operand2asm", mdl ) );
00076         }
00077         return reflection;
00078 }

ptr< object::field_list_list > lestes::backend_v2::intercode::visitor_ge_operand2asm::field_values_get (  )  const [virtual]

for purposes of dumping

Reimplemented from lestes::backend_v2::intercode::visitor_ge_operand2lstring_gen_base.

Definition at line 80 of file visitor_ge_operand2asm.g.cc.

References lestes::std::list< T >::create(), and lestes::backend_v2::intercode::visitor_ge_operand2lstring_gen_base::field_values_get().

00081 {
00082         ptr < field_list_list > result = visitor_ge_operand2lstring_gen_base::field_values_get();
00083         result->push_back( value_list::create() );
00084         result->back()->push_back( this->instruction );
00085         return result;
00086 }

void lestes::backend_v2::intercode::visitor_ge_operand2asm::gc_mark ( void   )  [protected, virtual]

Marking routine for class visitor_ge_operand2asm.

Marking routine is used for garbage collection.

Author:
lsg

Reimplemented from lestes::backend_v2::intercode::visitor_ge_operand2lstring_gen_base.

Definition at line 93 of file visitor_ge_operand2asm.g.cc.

References lestes::backend_v2::intercode::visitor_ge_operand2lstring_gen_base::gc_mark().


Member Data Documentation

srp< ::lestes::backend_v2::intercode::ge_pi > lestes::backend_v2::intercode::visitor_ge_operand2asm::instruction [private]

A pseudoinstruction that uses the operand.

Definition at line 72 of file visitor_ge_operand2asm.g.hh.

Referenced by instruction_get(), instruction_set(), and visit_ge_operand_reg().

ptr< object::reflection_list > lestes::backend_v2::intercode::visitor_ge_operand2asm::reflection = reflection [static, private]

Reimplemented from lestes::backend_v2::intercode::visitor_ge_operand2lstring_gen_base.

Definition at line 73 of file visitor_ge_operand2asm.g.hh.

Referenced by reflection_get().


The documentation for this class was generated from the following files:
Generated on Mon Feb 12 18:24:08 2007 for lestes by doxygen 1.5.1-20070107