Public Member Functions | Public Types | List of all members
argloc_t Class Reference

Detailed Description

Describes an argument location.

A typical argument is stored in one location, either a register or a stack slot.
However, some arguments can be stored in multiple locations, for example in a pair
of registers. In some really complex cases an argument can be located in multiple
registers and some stack slots. This class can describe all these cases.

Inherited by argpart_t.

Public Member Functions

 argloc_t (void)
 argloc_t (const argloc_t &r)
 ~argloc_t (void)
argloc_toperator= (const argloc_t &r)
void swap (argloc_t &r)
 Assign this == r and r == this.
const char * dstr (void) const
argloc_type_t atype (void) const
 Get type (Argument location types)
bool is_reg1 (void) const
bool is_reg2 (void) const
bool is_reg (void) const
 is_reg1() || is_reg2()
bool is_rrel (void) const
bool is_ea (void) const
bool is_stkoff (void) const
bool is_scattered (void) const
bool is_mixed_scattered () const
 mixed scattered: consists of register and stack parts
bool is_fragmented (void) const
 is_scattered() || is_reg2()
bool is_custom (void) const
bool is_badloc (void) const
int reg1 (void) const
 Get the register info. More...
int regoff (void) const
 Get offset from the beginning of the register in bytes. More...
int reg2 (void) const
 Get info for the second register. More...
uint32 get_reginfo (void) const
 Get all register info. More...
sval_t stkoff (void) const
 Get the stack offset. More...
ea_t get_ea (void) const
 Get the global address. More...
scattered_aloc_tscattered (void)
 Get scattered argument info. More...
const scattered_aloc_tscattered (void) const
 copydoc scattered()
rrel_tget_rrel (void)
 Get register-relative info. More...
const rrel_tget_rrel (void) const
 copydoc get_rrel()
void * get_custom (void) const
 Get custom argloc info. More...
biggest_t get_biggest (void) const
 Get largest element in internal union.
void _set_badloc (void)
 Use set_badloc()
void _set_reg1 (int reg, int off=0)
 Use set_reg1()
void _set_reg2 (int _reg1, int _reg2)
 Use set_reg2()
void _set_stkoff (sval_t off)
 Use set_stkoff()
void _set_ea (ea_t _ea)
 Use set_ea.
bool _consume_rrel (rrel_t *p)
 Use consume_rrel()
bool _consume_scattered (scattered_aloc_t *p)
 Use consume_scattered()
void _set_custom (argloc_type_t ct, void *pdata)
 Set custom argument location (careful - this function does not clean up!)
void _set_biggest (argloc_type_t ct, biggest_t data)
 Set biggest element in internal union (careful - this function does not clean up!)
void set_reg1 (int reg, int off=0)
 Set register location.
void set_reg2 (int _reg1, int _reg2)
 Set secondary register location.
void set_stkoff (sval_t off)
 Set stack offset location.
void set_ea (ea_t _ea)
 Set static ea location.
void consume_rrel (rrel_t *p)
 Set register-relative location - can't be NULL.
void consume_scattered (scattered_aloc_t *p)
 Set distributed argument location.
void set_badloc (void)
 Set to invalid location.
sval_t calc_offset (void) const
 Calculate offset that can be used to compare 2 similar arglocs.
bool advance (int delta)
 Move the location to point 'delta' bytes further.

Public Types

typedef ea_t biggest_t
 to facilitate manipulation of internal union

Member Function Documentation

int argloc_t::reg1 ( void  ) const

Get the register info.

Use when atype() == ALOC_REG1 or ALOC_REG2

int argloc_t::regoff ( void  ) const

Get offset from the beginning of the register in bytes.

Use when atype() == ALOC_REG1

int argloc_t::reg2 ( void  ) const

Get info for the second register.

Use when atype() == ALOC_REG2

uint32 argloc_t::get_reginfo ( void  ) const

Get all register info.

Use when atype() == ALOC_REG1 or ALOC_REG2

sval_t argloc_t::stkoff ( void  ) const

Get the stack offset.

Use if atype() == ALOC_STACK

ea_t argloc_t::get_ea ( void  ) const

Get the global address.

Use when atype() == ALOC_STATIC

scattered_aloc_t& argloc_t::scattered ( void  )

Get scattered argument info.

Use when atype() == ALOC_DIST

rrel_t& argloc_t::get_rrel ( void  )

Get register-relative info.

Use when atype() == ALOC_RREL

void* argloc_t::get_custom ( void  ) const

Get custom argloc info.

Use if atype() == ALOC_CUSTOM

The documentation for this class was generated from the following file: