
		   TMS470 TI CODE GENERATION TOOLS
			     Release 1.22e


   Thanks for choosing Texas Instruments software development tools.  It is 
 our goal to provide you with the most useful and efficient development 
 tools from which to develop your applications around Texas Instruments 
 processors.  


 IMPORTANT NOTES:
 ================
  + fixes all bugs known as of 7/3/97.  Bugs fixed since the last
    release include:
    o Faulty logic in the cross jumping optimization may generate incorrect
      code in rare circumstances.
    o Optimizer may illegally attempt to optimize loads of shorts for
      volatile accesses.
  + implements support for global register variables.  See note below
    for more details;
  + loosens the alignment restriction on structure types.  In releases
    previous to beta 1.12, all structures were word aligned.  In
    release beta 1.12 and after, the alignment of a structure
    is the alignment of its most restrictive member (eg, a structure
    containing only char and short type members has an alignment of 
    a short).  Use the "-mw" shell option to revert back to the old
    structure type alignment restrictions;
  + implements two new builtin functions, __curpc() and 
    __run_address_check().  See note below for details;
  + semantics of the -ss interlist options have changed and a new
    interlist option, -os, has been added:
    + -s   interlist optimizer comments if optimized, else C source;
    + -ss  interlist C source, even if optimized;
    + -os  interlist optimizer comments if optimized;
  + incorporates changes to the TI-COFF object format, now allowing
    section names longer than 8 characters and filenames longer than
    14 characters.  If you depend upon a third party TI-COFF dependent
    tool that does not yet support the recent changes to the format,
    then use the -v1 linker option, which instructs the linker to 
    generate the old format.  Of course, your output must not have
    section names longer than 8 characters nor filenames longer than
    14 characters.  The -v1 linker option is a temporary option for
    this transition, and it will be removed in a future release.


 Global Register Variables:
 -------------------------
   The 470 compiler extends the C language by adding a special convention to
 the register storage class specifier to allow the allocation of global
 registers.  This special global declaration has the form:
 
   register <type> <regid>
 
   where <type> is the type of the register variable, and
         <regid> is one of __R5, __R6, or __R9, each corresponding to the
         registers R5, R6, or R9, respectively.
 
   When you use this declaration at the file level, the register is 
 permanently reserved from any other use by the optimizer and code 
 generator for that file.  You cannot assign an initial value to the
 register.  You can use a #define directive to assign a meaningful 
 name to the register; for example:
 
 register struct data_struct *__R5;
 
 #define data_ptr __R5
 
 ...
 {
   data_ptr++;
   data_ptr->element;
 }
 
   The -r <register> shell option allows you to prevent the compiler from
 using the named register.  This lets you reserve the named register in
 modules that do not have the global register variable declaration, such
 as the runtime-support library.
 
 
 Builtin Functions:
 ------------------
  
   Builtin functions are functions predefined by the compiler.  They may be
 called like a regular function, but do not require a prototype or 
 definition; the compiler supplies the proper prototype and definition.
  
   The following are builtin function supported by the TMS470 C compiler:
  
 o void *__curpc(void);
  
   __curpc() returns the value of the program counter where it is called.
  
 o int __run_address_check(void);
  
   __run_address_check() returns 1 if the code performing the call
 is located at its run time address, as assigned by the linker.  Otherwise,
 0 is returned.
 




