GCC Middle and Back End API Reference
address_info Struct Reference

#include <rtl.h>

Collaboration diagram for address_info:

Data Fields

enum machine_mode mode
addr_space_t as
rtxouter
rtxinner
rtxsegment
rtxbase
rtxindex
rtxdisp
rtxsegment_term
rtxbase_term
rtxindex_term
rtxdisp_term
rtxbase_term2
enum rtx_code addr_outer_code
enum rtx_code base_outer_code
bool autoinc_p

Detailed Description

   Information about an address.  This structure is supposed to be able
   to represent all supported target addresses.  Please extend it if it
   is not yet general enough.  

Field Documentation

enum rtx_code address_info::addr_outer_code
     ADDRESS if this structure describes an address operand, MEM if
     it describes a MEM address.  

Referenced by lsb_bitfield_op_p().

addr_space_t address_info::as
     The address space.  

Referenced by lsb_bitfield_op_p().

bool address_info::autoinc_p
     True if this is an RTX_AUTOINC address.  
rtx* address_info::base
enum rtx_code address_info::base_outer_code
     If BASE is nonnull, this is the code of the rtx that contains it.  
rtx* address_info::base_term
rtx* address_info::base_term2
     In a {PRE,POST}_MODIFY address, this points to a second copy
     of BASE_TERM, otherwise it is null.  

Referenced by base_plus_disp_to_reg().

rtx* address_info::disp
rtx* address_info::disp_term
rtx* address_info::index
rtx* address_info::index_term
rtx* address_info::inner
     A pointer to the inner address, after all address mutations
     have been stripped from the top-level address.  It can be one
     of the following:

     - A {PRE,POST}_{INC,DEC} of *BASE.  SEGMENT, INDEX and DISP are null.

     - A {PRE,POST}_MODIFY of *BASE.  In this case either INDEX or DISP
       points to the step value, depending on whether the step is variable
       or constant respectively.  SEGMENT is null.

     - A plain sum of the form SEGMENT + BASE + INDEX + DISP,
       with null fields evaluating to 0.  
enum machine_mode address_info::mode
     The mode of the value being addressed, or VOIDmode if this is
     a load-address operation with no known address mode.  

Referenced by lsb_bitfield_op_p(), and process_alt_operands().

rtx* address_info::outer
     A pointer to the top-level address.  

Referenced by lsb_bitfield_op_p(), and valid_address_p().

rtx* address_info::segment
     Components that make up *INNER.  Each one may be null or nonnull.
     When nonnull, their meanings are as follows:

     - *SEGMENT is the "segment" of memory to which the address refers.
       This value is entirely target-specific and is only called a "segment"
       because that's its most typical use.  It contains exactly one UNSPEC,
       pointed to by SEGMENT_TERM.  The contents of *SEGMENT do not need
       reloading.

     - *BASE is a variable expression representing a base address.
       It contains exactly one REG, SUBREG or MEM, pointed to by BASE_TERM.

     - *INDEX is a variable expression representing an index value.
       It may be a scaled expression, such as a MULT.  It has exactly
       one REG, SUBREG or MEM, pointed to by INDEX_TERM.

     - *DISP is a constant, possibly mutated.  DISP_TERM points to the
       unmutated RTX_CONST_OBJ.  
rtx* address_info::segment_term

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