home *** CD-ROM | disk | FTP | other *** search
/ OpenStep 4.2J (Developer) / os42jdev.iso / NextDeveloper / Source / GNU / cctools / as / relax.h < prev    next >
Text File  |  1993-09-09  |  2KB  |  45 lines

  1. /* The type used for a target address */
  2. typedef unsigned long relax_addressT;
  3.  
  4. /*
  5.  * relax_stateT is a fragment's type and stored in a struct frag's fr_type
  6.  * field.
  7.  */
  8. typedef enum {
  9.     rs_fill,    /* Variable chars to be repeated fr_offset */
  10.         /* times. Fr_symbol unused. */
  11.         /* Used with fr_offset == 0 for a constant */
  12.         /* length frag. */
  13.     rs_align,    /* Align: Fr_offset: power of 2. */
  14.         /* 1 variable char: fill character. */
  15.     rs_org,    /* Org: Fr_offset, fr_symbol: address. */
  16.         /* 1 variable char: fill character. */
  17.     rs_machine_dependent,
  18. } relax_stateT;
  19.  
  20. /*
  21.  * For machine dependent fragments, a struct frag's who's fr_type field is
  22.  * rs_machine_dependent it's substate is stored in the struct frag's fr_subtype;
  23.  * field.  The substate is used to index in to md_relax_table by relax_section()
  24.  * in layout.c to drive the span dependent branch algorithm of the assembler.
  25.  * The substate is a machine dependent indication of what type of branch
  26.  * instruction this fragment is.
  27.  */
  28. typedef unsigned long relax_substateT;
  29.  
  30. /*
  31.  * relax_typeS is the structure that is the entry in the md_relax_table array.
  32.  * It is indexed into by the substate of a fragment for machine depependent
  33.  * branches that have variable sizes.  The entry tell how far this branch can
  34.  * reach, rlx_forward and rlx_backward, as well as the size of branch,
  35.  * rlx_length, and which substate go to, rlx_more, if this sized branch can't 
  36.  * reach it's target.
  37.  */
  38. typedef struct {
  39.     long        rlx_forward;  /* Forward  reach. Signed number. > 0. */
  40.     long        rlx_backward; /* Backward reach. Signed number. < 0. */
  41.     unsigned char   rlx_length;      /* Bytes length of this address. */
  42.     relax_substateT rlx_more;      /* Next longer relax-state. */
  43.                   /* 0 means there is no 'next' relax-state. */
  44. } relax_typeS;
  45.