Home
"TMS320C6000 Optimizing C Compiler User's Guide"
Contents
1. If you need to save restore the SAT bit i e you were performing saturated arithmetic when interrupted into the C interrupt service routine which may also perform some saturated arithmetic in your C interrupt service routine it can be done in a similar way as the above example using the SAVE_SAT and RE STORE_SAT macros 8 6 3 Using Assembly Language Interrupt Routines 8 42 You can handle interrupts with assembly language code as long as you follow the same register conventions the compiler does Like all assembly functions interrupt routines can use the stack access global C C variables and call C C functions normally When calling C C functions be sure that any reg isters listed in Table 8 2 on page 8 17 are saved because the C C function can modify them Run Time Support Arithmetic Routines 8 7 Run Time Support Arithmetic Routines The run time support library contains a number of assembly language func tions that provide arithmetic routines for C C math operations that the C6000 instruction set does not provide such as integer division integer remainder and floating point operations These routines follow the standard C C calling sequence You can call them directly from C C but the compiler automatically adds them when appropri ate The source code for these functions is in the source library rts src The source code has comments that describe the operation of the functions You can ext
2. mk6x options src_arch lobj lib Command that invokes the utility Options affect how the library build utility treats your files Options can appear anywhere onthe commandline or ina linker command file Options are discussed in section 10 2 and 10 4 The name of a source archive file For each source archive named mk6x builds an object library according to the run time model specified by the command line options The optional object library name If you do not specify a name for the library mk6x uses the name of the source archive and appends a ib suffix For each source archive file specified a cor responding object library file is created You cannot build an object library from multiple source archive files The mk6x utility runs the shell program on each source file in the archive to compile and or assemble it Then the utility collects all the object files into the object library All the tools must be in your PATH environment variable The util ity ignores the environment variables C6X_C_OPTION C_OPTION C6X_C_DIR and C_DIR Library Build Utility 10 3 Library Build Utility Options 10 3 Library Build Utility Options 10 4 Most of the options that are included on the command line correspond directly to options of the same name used with the compiler assembler linker and shell The following options apply only to the library build utility C Extracts C source files contained in the source a
3. FP set ATS DP set B14 SP set B15 opt 6 x O2 433_32 if 43_32 opt sect text global _main _main pee VK SI _a A0 VKH SI _a A0 V L2X AO B4 l ZERO ak A3 l ZERO D2 B5 II VK S2 2 B0 7 17 PRE L2 PIPED LOOP PROLOG BO B rod L3 Haan ee BO B SL L3 7 7I BO B zoi L3 7 7 BO B Si L3 eee 7 BO SUB A2 BO 2 B0 7e ee 7 ADD S2 8 B4 B4 18 BO B 2S L3 7 ee 7 BO SUB L2 BO 2 B0 7 pa L3 PIPED LOOP KERNEL STW D1T1 A3 A0 8 8 STW D2T2 B5 B4 4 e S ADD lt 52 8 B4 B4 7 8I BO B gsi L3 7 ee 7 BO SUB D2 BO 2 B0 7 eeee 7 ER L4 PIPED LOOP EPILOG pee B S2 B3 7 13 NOP 5 BRANCH OCCURS 9 global a bss _a 40 4 Optimizing Your Code 3 37 What Kind of Optimization Is Being Performed 3 13 2 Alias Disambiguation C and C programs generally use many pointer variables Frequently com pilers are unable to determine whether or not two or more lvalues lowercase L symbols pointer references or structure references refer to the same memory location This aliasing of memory locations often prevents the compil er from retaining values in registers because it cannot be sure that the register and memory continue to hold the same values over time Alias disambiguation is a technique that determines when two pointer expres sions cannot point to the same location allowing the compiler to freely opti mize such expressions 3 13 3
4. 000c cece reece 3 22 Assembly Optimizer Directives Summary 0602000 cece eee eee eee e ees 4 16 Sections Created by the Compiler 0c ccc eect ene eee eee 5 11 TMS320C6000 C C Data Types 2 c ccc eee eens 7 6 Valid Control Registers 0 0c ccc ee nent eee eens 7 8 Data Representation in Registers and Memory 6 00 c cece eee tee eee 8 8 Register USage saersi ea f sagt pete eed ee Reed eet Sake Meee REDEE ant 8 17 TMS320C6000 C C Compiler Intrinsics 0 0 cece eee 8 25 Summary of Run Time Support Arithmetic Functions 0 000 e eee eee ee 8 43 Macros That Supply Integer Type Range Limits limits h climits 9 16 Macros That Supply Floating Point Range Limits float h cfloat 9 17 Summary of Run Time Support Functions and Macros 0 000 e eee e ees 9 26 Summary of Options and Their Effects 0 00 c eects 10 5 Contents XV Examples 4 7 4 8 4 9 4 10 4 11 4 12 4 13 4 14 4 15 4 16 4 17 5 1 6 1 6 2 6 3 6 4 7 1 7 2 xvi Using the inline keyword 0 cee cece tenet enna 2 37 How the Run Time Support Library Uses the _INLINE Preprocessor Symbol 2 39 An Interlisted Assembly Language File 0 0 cece e eee ees 2 44 Software Pipelining Information 060 ccc cece eee eens 3 6 The Function From Example 2 3 Compiled With the o2 and os Options
5. E Performs control flow graph simplification Allocates variables to registers Performs loop rotation Eliminates unused code Simplifies expressions and statements Expands calls to functions declared inline g o1 Performs all o0 optimizations plus m Performs local copy constant propagation m Removes unused assignments E Eliminates local common expressions Invoking Optimization Lj 02 Performs all o1 optimizations plus m Performs software pipelining see section 3 2 on page 3 4 m Performs loop optimizations m Eliminates global common subexpressions m Eliminates global unused assignments Mm Converts array references in loops to incremented pointer form m Performs loop unrolling The optimizer uses o2 as the default if you use o without an optimization level Lj 0o3 Performs all o2 optimizations plus m Removes all functions that are never called m Simplifies functions with return values that are never used E Inlines calls to small functions a Reorders function declarations so that the attributes of called func tions are known when the caller is optimized m Propagates arguments into function bodies when all calls pass the same value in the same argument position E Identifies file level variable characteristics If you use 03 see section 3 5 Using the o3 Option on page 3 18 for more information In addition to these optimizations there are some optimizations that are per forme
6. struct tm time_str time_str tm_year 2001 1900 time_str tm_mon 7 time_str tm_mday 4 time_str tm_hour 0 time_str tm_min 0 time_str tm_sec 1 time_str tm_isdst 1 mktime amp time_str After calling this function time_str tm_wday RY 5 contains the day of the week for July 4 2001 modf modff Syntax for C Syntax for C Defined in Description Example Syntax for C Syntax for C Defined in Description perror Signed Integer and Fraction include lt math h gt double modf double value double ip float modff float value float ip include lt cmath gt double std modf double value double ip float std modff float value float ip modf c and modff c in rts src The modf and modff functions break a value into a signed integer and a signed fraction Each of the two parts has the same sign as the input argument The function returns the fractional part of value and stores the integer as a double at the object pointed to by iptr double value ipart fpart value 10 125 fpart modf value amp ipart After execution ipart contains 10 0 and fpart contains 125 K Map Error Number include lt stdio h gt void perror const char _s include lt cstdio gt void std perror const char _s perror c in rts src The perror function maps the error number in _s to a string and prints the error message Run Time Support Fu
7. 8 32 Interfacing C and C With Assembly Language Table 8 3 TMS320C6000 C C Compiler Intrinsics Continued Assembly C C Compiler Intrinsic Instruction Description Devicet unsigned _shlmb unsigned src7 SHLMB Shifts src2 left right by one byte and C6400 unsigned src2 the most least significant byte of src1 unsigned _shrmb unsigned src7 SHRMB is merged intoithe easUMOSI SININ cant byte position unsigned src2 int __shr2 int src7 uint src2 SHR2 For each 16 bit quantity in src2 the C6400 uint shru2 uint src1 SHRU2 quantity is arithmetically or logically i i shifted right by src1 number of bits uint src2 eg src2 can contain signed or unsigned values int _smpy int src7 int sr2 SMPY Multiplies src1 by src2 left shifts the result by 1 and returns the result If int smpyh int sret sie ee the result is 0x80000000 saturates int_smpyhl int src7 int sr2 SMPYHL the result to 0x7FFF FFFF int_smpylh int src7 int sr2 SMPYLH double _smpy2 int src7 int sr2 SMPY2 Performs 16 bit multiplication be C6400 tween pairs of signed packed 16 bit values with an additional 1 bit left shift and saturate into a double result int _spack2 int src7 int sr2 SPACK2 Two signed 32 bit values are satu C6400 rated to 16 bit values and packed into the return value uint _spacku int src7 int sr2 SPACKU4 Four signed 16 bit values are satu C6400 rated to 8 bit values and packed
8. Library build utility The library build utility mk6x lets you custom build object libraries from source for any combination of run time models or target CPUs For more information see Chapter 10 Library Build Utility Stand alone simulator The stand alone simulator load6x loads and runs an executable COFF out file When used with the C I O libraries the stand alone simulator sup ports all C I O functions with standard output to the screen For more information see Chapter 6 Using the Stand Alone Simulator C name demangler utility The C name demangler dem6x is a debugging aid that converts mangled names found in the output of the compiler tools such as assem bly files and linker error messages back to their original name as declared in C source For more information see Chapter 11 C Name Demangler Introduction 1 7 Chapter 2 Using the C C Compi ler Translating your source program into code that the C6000 can execute is a multistep process You must compile assemble and link your source files to create an executable object file The C6000 compiler tools contain a special shell program cl6x that enables you to execute all of these steps with one command This chapter provides a complete description of how to use the shell program to compile assemble and link your programs This chapter also describes the preprocessor inline function expansion fea tures and interlist utility Topic
9. b Initialized information for variables defined in a global _x bss _x 4 4 sect GINI TC AO align 8 field CIR S 8 field _1i 0 32 field 0Ox17 16 sect text global _i ets usect bss c 2 2 sect eC Clnee ve align 4 field _x Sbss 32 sect text global _p mon usece bss ro 4 4 sect Seanad 6 align 8 field IR_1 32 field _at0 32 field Ox1 32 field 0x2 32 field 0x3 32 field 0x4 32 field 0x5 32 IR_1 set 20 sect text global _a bss _a 20 4 32 7 _p 0 Qa 2 32 64 96 128 8 48 System Initialization b Initialized information for variables defined in a Continued PRR RR RRR KKK KR KR RK KKK KK RK KKK KKK KK RK KKK KK EK KK KKK KK KEK KK KKK KK KEK KK KK KEK KEK KKK KKK RK MARK THE END OF THE SCALAR INIT RECORD IN CINIT C K 7 EFK K K k k k A k k RK RRR KKK KK RK e e KK KEK KR KR KKK KEK KR KK KKK KEK KKK k k k A KEK k k KK KEK k k k k k KEKE GCIR sect senit ea ERKE ER REE REA RRS KERR EE EEEE RA RB EE KEER RE RRR A RR IR BKK RR FERN ITE RR EE BRE E EAE EEA RK ADDRESS RELOCATIONS SCALARS FEKRR IER KEKR KRE KRAE ERR EEIE RIRE IR ER RR BIR EK ATR RRR E EE EER KEKE ER IR BIS IE R EE KERERE EK sect Cini tse align 8 field 4 32 align 4 field _p 32 The cinit section must contain only initialization tables in this format When interfacing assembly language m
10. void std bsearch register const void key register const void base size_tnmemb size_t size int compar const void const void bsearch c in rts src The bsearch function searches through an array of nmemb objects for a mem ber that matches the object that key points to Argument base points to the first member in the array size specifies the size in bytes of each member The contents of the array must be in ascending order If a match is found the function returns a pointer to the matching member of the array if no match is found the function returns a null pointer 0 Argument compar points to a function that compares key to the array elements The comparison function should be declared as int cmp const void ptrl const void ptr2 The cmp function compares the objects that ptr1 and ptr2 point to and returns one of the following values lt 0 if ptr1 is less than ptr2 O if ptr1 is equal to ptr2 gt 0 if ptri is greater than ptr2 int list 10 9 8 7 6 5 4 3 2 1 0 int intemp const void ptr1 const void ptr2 return int ptr1 int ptr2 Syntax for C Syntax for C Defined in Description Example ceil ceilf Syntax for C Syntax for C Defined in Description Example ceil ceilf Allocate and Clear Memory include lt stdlib h gt void calloc size_t num size_t size include lt cstdlib gt void std calloc size_t num size_t si
11. I Machine register names If you specify a machine register name its position in the argument list must correspond to the argument passing conventions for C For example the C C compiler passes the first argu ment to a function in register A4 This means that the first argument in a cproc directive must be A4 or a symbolic name Up to ten arguments can be used with the cproc directive Using the Assembly Optimizer 4 19 cproc endproc Define a C Callable Procedure 4 20 J Symbolic names If you specify a symbolic name then the assembly optimizer ensures that either the symbolic name is allocated to the appropriate argument passing register or the argument passing register is copied to the register allocated for the symbolic name For example the first argument in a C C callis passed in register A4 so if you specify the following cproc directive frame cproc argl The assembly optimizer either allocates arg1 to A4 or arg1 is allocated to a different register such as B7 and an MV A4 B7 is automatically gener ated I Register pairs A register pair is specified as arghi arglo and represents a 40 bit argument or a 64 bit type double argument for C6700 For example the cproc defined as follows fon lt eproc argl arg2hi arg2lo arg3 B6 args B9 B8 return res endproc corresponds to a C function declared as int fen int argl long arg2 int arg3 int arg4 int arg5 long arge In this example the fourth a
12. Optimizing Your Code 3 39 What Kind of Optimization Is Being Performed Example 3 5 Control Flow Simplification and Copy Propagation Continued b Compiler output FP set A15 DP set B14 SP set B15 OPT6X EXE 03 fsm if fsm opt sect text global _fsm PERERA EER RRR ECAR EE ORE EAE RRR ARE RR ACRE Te RRR ICR RT IK BE AAS I IE RITE RS ER IER BE AER IT He RR FUNCTION NAME _fsm pe Regs Modified BO B4 x ake Regs Used BO B3 B4 g Local Frame Size 0 Args 0 Auto 0 Save 0 byte is PERRE ERE EEEE EE EE EDR ERK EEREEE REE BERRA ICR EE REE REE EEEE KEKE EE EK ER RS KR RRR BS ERE RK _fsm Fl ai atone tie teas es ca eee a ae eas ae a ee ER 23 LDW D2T2 B4 B0 gt Jsi JER L3 OP 4 BO B AS L7 18 OP 4 BO LDW D2T2 B4 B0 10 BRANCH OCCURS 8 per LDW D2T2 B4 B0 191 OP 4 BO B Pope L3 61293 OP 4 BO LDW sD2T2 B4 B0 18 BRANCH OCCURS 9 eee r L5 LDW D2T2 B4 B0 1101 soe L6 Pa ET OP 4 BO B SSL L6 xro OP 4 B0 LDW D2T2 B4 B0 ELO BRANCH OCCURS 10 SIER a B T92 B3 7 T2 OP 5 BRANCH OCCURS 12 3 40 What Kind of Optimization Is Being Performed 3 13 4 Data Flow Optimizations Collectively the following data flow optimizations replace expressions with less costly ones detect and remove unnecessary assignments and
13. Using Inline Function Expansion 2 10 5 Inlining Restrictions 2 40 There are several restrictions on what functions can be inlined for both auto matic inlining and definition controlled inlining Functions with local static vari ables or a variable number of arguments are not inlined with the exception of functions decalred as static inline In functions declared as static inline expan sion occurs despite the presence of local static variables In addition a limit is placed on the depth of inlining for recursive or nonleaf functions Further more inlining should be used for small functions or functions that are called in a few places though the compiler does not enforce this A function may be disqualified from inlining if it Returns a struct or union Has a struct or union parameter Has a volatile parameter Has a variable length argument list Declares a struct union or enum type Contains a static variable Contains a volatile variable Is recursive Contains a pragma Has too large of a stack too many local variables O O O O O O O O O L Interrupt Flexibility Options mi Option 2 11 Interrupt Flexibility Options mi Option On the C6000 architecture interrupts cannot be taken in the delay slots of a branch In some instances the compiler can generate code that cannot be interrupted for a potentially large number of cycles For a given real time sys tem there may be a hard limit on how long inter
14. compiler however does not use the data section You can instruct the com piler to create additional sections by using the CODE_SECTION and DATA_SECTION pragmas see sections 7 7 1 The CODE_SECTION Pragma on page 7 19 and 7 7 4 The DATA_SECTION Pragma on page 7 22 8 1 2 C C System Stack 8 4 The C C compiler uses a stack to J Save function return addresses Lj Allocate local variables 1 Pass arguments to functions 1 Save temporary results The run time stack grows from the high addresses to the low addresses The compiler uses the B15 register to manage this stack B15 is the stack pointer SP which points to the next unused location on the stack The linker sets the stack size creates a global symbol _ STACK_SIZE and assigns it a value equal to the stack size in bytes The default stack size is 0x400 1024 bytes You can change the stack size at link time by using the stack option with the linker command For more information on the stack option see section 5 4 Linker Options on page 5 6 At system initialization SP is set to the first 8 byte aligned address before the end highest numerical address of the stack section Since the position of the stack depends on where the stack section is allocated the actual address of the stack is determined at link time The C C environment automatically decrements SP register B15 at the entry to a function to reserve all the space necessary for the
15. fid fopen myfile w fprintf fid Hello world n fclose fid printf Hello again world n Issuing the following shell command compiles links and creates the file main out from the C6200 run time support little endian library cl6x main c z heap 400 1 rts6200 lib o main out Executing main out results in Hello world being output to a file and Hello again being output to your host s stdout window With properly written device drivers the library also offers facilities to perform I O on a user specified device Te Note If there is not enough space on the heap for a C I O buffer buffered opera tions on the file will fail If a call to printf mysteriously fails this may be the reason Check the size of the heap To set the heap size use the heap op tion when linking see page 5 6 The C I O Functions 9 2 1 Overview of Low Level I O Implementation The code that implements 1 O is logically divided into layers high level low level and device level The high level functions are the standard C library of stream I O routines printf scanf fopen getchar and so on These routines map an I O request to one or more of the I O commands that are handled by the low level routines The low level routines are comprised of basic I O functions open read write close lseek rename and unlink These low level routines provide the inter face between the high level funct
16. o option to name the output file options Options affect how the linker handles your object files Options can appear anywhere on the command line or in alinker command file Options are discussed in sec tion 5 4 o name out The o option names the output file ibraryname lowercase L Identifies the appropriate archive library containing C C run time support and floating point math functions The option tells the linker that a file is an archive library If you are linking C C code you must use a run time support library You can use the li braries included with the compiler or you can create your own run time support library If you have specified a run time support library in a linker command file you do not need this parameter Ink cmd Contains options filenames directives or commands for the linker 5 2 Invoking the Linker as an Individual Program When you specify a library as linker input the linker includes and links only those library members that resolve undefined references For example you can link a C C program consisting of modules prog1 prog2 and prog3 the output file is named prog out enter ink6 x c progi prog2 progs o prog out 1l rts6200 1ib The linker uses a default allocation algorithm to allocate your program into memory You can use the MEMORY and SECTIONS directives in the linker command file to customize the allocation process For more information see the TMS32
17. translates to a line such as Prince ss Bar V1iseS8s1 7 Jan 14 1997 2 5 2 The Search Path for include Files The include preprocessor directive tells the compiler to read source statements from another file When specifying the file you can enclose the file name in double quotes or in angle brackets The filename can be a complete pathname partial path information or a filename with no path information J If you enclose the filename in double quotes the compiler searches for the file in the following directories in this order 1 The directory that contains the current source file The current source file refers to the file that is being compiled when the compiler encounters the include directive 2 Directories named with the option 3 Directories set with the C_DIR or C6X_C_DIR environment variable Using the C C Compiler 2 25 Controlling the Preprocessor J Ifyou enclose the filename in angle brackets lt gt the compiler searches for the file in the following directories in this order 1 Directories named with the i option 2 Directories set with the C_DIR or C6X_C_DIR environment variable See section 2 5 2 1 Changing the include File Search Path i Option for in formation on using the i option See the code generation tools CD ROM insert for information on the C_DIR environment variable 2 5 2 1 Changing the include File Search Path i Option 2 26 The i option na
18. 0 2 eee nee eee 7 18 7 7 1 The CODE_SECTION Pragma 00 scene eee eee 7 19 7 7 2 The DATA_ALIGN Pragma 00 ccc cece eect e eee 7 20 7 7 3 The DATA_MEM_BANK Pragma 060 cee eee eens 7 20 7 7 4 The DATA_SECTION Pragma 00 cece eect ene e eee eee 7 22 7 7 5 The FUNC_CANNOT_INLINE Pragma 00 0ceeeeeee eee eee 7 23 7 7 6 The FUNC_EXT_CALLED Pragma 0 cc cece eee eee 7 23 7 7 7 The FUNC_INTERRUPT_THRESHOLD Pragma 05 7 24 7 7 8 The FUNC_IS_ PURE Pragma 000 cece cnet 7 25 7 7 9 The FUNC_IS SYSTEM Pragma 0 000 e cece eee 7 25 7 7 10 The FUNC_NEVER_RETURNS Pragma 000 ee eee eee eee 7 26 7 7 11 The FUNC_NO_GLOBAL_ASG Pragma 0ccceeee eee eee 7 26 7 7 12 The FUNC_NO_IND_ASG Pragma 006 e cence eee 7 27 7 7 13 The INTERRUPT Pragma 000 0 cece eee ete e eee 7 27 7 7 14 The MUST_ITERATE Pragma 000 cece cnet eee eee 7 28 7 7 15 The NMILINTERRUPT Pragma 0 cece eee e eee eee 7 29 7 7 16 The PROB_ITERATE Pragma 0 00 cece ete eens 7 29 7 7 17 The STRUCT_ALIGN Pragma 000 cece eens 7 30 7 7 18 The UNROLL Pragma 006 cece eens 7 31 7 8 Generating LinknamesS 0 00 c cect nett eens 7 32 7 9 Initializing Static and Global Variables 0 0 00 c cece eee tenes 7 33 7 10 Changing the ANSI C language Mode
19. 134 134 load6x q g t out KKK KKK KKK KKK KK KKK KKK KKK KKK KK KKK KKK KKK KKK KK KKK KKK KKK KKK KKK KK KKK KKK KK KKK KKK KK c6xcode t out 0000554c main at line 32 c6xcode t c 000073a0 exit 10543 10543 18 Count Inclusive Incl Max Exclusive 60 60 1 55 55 1 35 35 1 10537 10537 6 6 Using the Profiling Capability of the Stand Alone Simulator Example 6 2 Profiling Dot Product Routines Continued KKK KK KKK KKK KKK KKK KKK KK KK KKK KKK KKK KKK KK KKK KKK KKK KKK KKK KKK KK KKK KKK KKK KKK KK KKK Area Name Count CF dot_prodl he 253 CF dot_prod2 1 25 CF dot_prod3 T lt 259 CF main 1 25 KKK KK KKK KK KKK KKK KKK KKK KK KKK KKK KKK KKK KKK KKK KK KKK KKK KKK KKK KKK KKK KKK KK KKK KK KKK Area Name Inclusive CF main 10537 99 CF dot_prodl 60 lt 1 CF dot_prod2 55 lt 1 CF dot_prod3 35 lt 1 KKK KKK KKK KKK KKK KKK KKK KKK KKK KKK KKK KKK KKK KKK KKK KKK KKK KK KKK KK KKK KKK KKK KKK KK KKK Area Name Incl Max CF main 10537 99 CF dot_prodl 60 lt 1 CF dot_prod2 55 lt 1 CF dot_prod3 35 lt 1 KKK KK KKK KKK KKK KK KKK KKK KK KKK KKK KKK KKK KK KKK KKK KKK KKK KKK KK KKK KKK KKK KKK KKK KK KKK Area Name Exclusive CF main 134 1 CF dot_prodl 60 lt 1 CF dot_prod2 ab lt 1 CF dot_prod3 35 lt 1 KKK KKK KKK KKK KK KKK KKK KKK KKK KK KKK KKK KKK KKK KK K
20. 2 Near indirect memory access MVK _a bss A0 ADD DP A0 A0 The expression _a bss calculates the offset of the symbol _a fromthe start of the bss section The compiler defines the global bss in generated assembly code The value of bss is the starting address of the bss sec tion 3 initialized near pointers The cinit record for an initialized near pointer value is stored as an offset from the beginning of the bss section During the autoinitialization of glob al variables the data page pointer is added to these offsets See section 8 8 3 Initialization Tables on page 8 47 Run Time Environment 8 7 Object Representation 8 2 Object Representation This section explains how various data objects are sized aligned and accessed 8 2 1 Data Type Storage Table 8 1 lists register and memory storage for various data types Table 8 1 Data Representation in Registers and Memory Data Type char unsigned char short unsigned short int unsigned int enum float long unsigned long double long double struct array pointer to data member pointer to member function 8 8 Register Storage Bits 0 7 of register Bits 0 7 of register Bits 0 15 of register Bits 0 15 of register Entire register Entire register Entire register Entire register Bits 0 39 of even odd register pair Bits 0 39 of even odd register pair Even odd register pair Even odd register pair Members are stor
21. 3 31 The Function From Example 2 3 Compiled With the 02 os and ss Options 3 32 Strength Reduction Induction Variable Elimination Register Variables and Software Pipelining 0 cece a eee eee 3 36 Control Flow Simplification and Copy Propagation 0 cece eee eee eee 3 39 Data Flow Optimizations and Expression Simplification 0000e eee 3 42 Inline Function Expansion 0 0 c cee tenets 3 43 Register Tracking Targeting 0 ccc en nee 3 45 C Code for Computing a Dot Product 00 neunana aana 4 9 Linear Assembly Code for Computing a Dot Product 0 cece eee eee 4 10 Software Pipeline Kernel for Computing a Dot Product With Example 4 2 4 11 Software Pipeline Information for Example 4 2 0 0000 eee 4 12 Code From Example 4 2 With Functional Unit Specifiers Added 4 13 Software Pipeline Kernel for Computing a Dot Product With Example 4 5 4 14 Lmac Function Code Showing Comments 000 cece eet e teeta 4 15 Load and Store Instructions That Specify Memory Bank Information 4 37 C Code for Dot Product 0 0 cece cette nett eens 4 38 Linear Assembly for Dot Product 0 cece ect eeeeeae 4 39 Dot Product Software Pipelined Kernel 6000 ccc cece eee e eens 4 39 Dot Product From Example 4 10 Unrolled to Prevent Memory Bank Conflicts
22. 7 16 The TMS320C6000 C C compiler treats register variables variables de fined with the register keyword differently depending on whether you use the o option J Compiling with optimization The compiler ignores any register definitions and allocates registers to variables and temporary values by using an algorithm that makes the most efficient use of registers J Compiling without optimization If you use the register keyword you can suggest variables as candidates for allocation into registers The compiler uses the same set of registers for allocating temporary expression results as it uses for allocating register variables The compiler attempts to honor all register definitions If the compiler runs out of appropriate registers it frees a register by moving its contents to memory If you define too many objects as register variables you limit the number of registers the compiler has for temporary expression results This limit causes excessive movement of register contents to memory Any object with a scalar type integral floating point or pointer can be defined as a register variable The register designator is ignored for objects of other types such as arrays The register storage class is meaningful for parameters as well as local vari ables Normally in a function some of the parameters are copied to a location on the stack where they are referenced during the function body The compiler copies a register p
23. 8 22 Interfacing C and C With Assembly Language The following are ways to use assembly language with C C code m m Use separate modules of assembled code and link them with compiled C C modules see section 8 5 1 Use intrinsics in C C source to directly call an assembly language state ment see section 8 5 2 on page 8 25 Use inline assembly language embedded directly in the C C source see section 8 5 6 on page 8 38 Use assembly language variables and constants in C C source see section 8 5 7 on page 8 39 Using Assembly Language Modules With C C Code Interfacing C C with assembly language functions is straightforward if you follow the calling conventions defined in section 8 4 Function Structure and Calling Conventions on page 8 18 and the register conventions defined in section 8 3 Register Conventions on page 8 16 C C code can access vari ables and call functions defined in assembly language and assembly code can access C C variables and call C C functions Follow these guidelines to interface assembly language and C E All functions whether they are written in C C or assembly language must follow the register conventions outlined in section 8 3 Register Con ventions on page 8 16 You must preserve registers A10 to A15 B3 and B10 to B15 and you may need to preserve A3 If you use the stack normally you do not need to explicitly preserve the stack In other words y
24. Disables definition controlled inlining but 03 opti mizations still perform automatic inlining Allows K amp R compatibility Generates a raw listing file Combines source files to perform program level optimization Enables relaxed mode ignores strict ANSI violations Enables strict ANSI mode for C C not K amp R C Generates a cross reference listing file Enables run time type information RTT g Parser options that control preprocessing Option ppa ppe ppd ppi ppl ppo Effect Continues compilation after preprocessing Performs preprocessing only Writes preprocessed output keeping the comments to a file with the same name as the input but with a pp extension Performs preprocessing only but instead of writing preprocessed output writes a list of dependency lines suitable for input to a standard make utility Performs preprocessing only but instead of writing preprocessed output writes a list of files included with the include directive Performs preprocessing only Writes preprocessed output with line control information line directives to a file with the same name as the input but with a pp extension Performs preprocessing only Writes preprocessed output to a file with the same name as the input but with a pp extension Page 7 36 2 38 7 34 2 34 3 20 7 36 7 36 2 33 Page 2 27 2 28 2 28 2 28 2 28 2 27 Changing the Compiler s Behavi
25. TMS320C6000 Optimizing Compiler User s Guide Literature Number SPRU1871 April 2001 wy TEXAS INSTRUMENTS I 7 f a o 4 7h GS 2 Q a vu w IMPORTANT NOTICE Texas Instruments and its subsidiaries Tl reserve the right to make changes to their products or to discontinue any product or service without notice and advise customers to obtain the latest version of relevant information to verify before placing orders that information being relied on is current and complete All products are sold subject to the terms and conditions of sale supplied at the time of order acknowledgment including those pertaining to warranty patentinfringement and limitation of liability Tl warrants performance of its products to the specifications applicable at the time of sale in accordance with Tl s standard warranty Testing and other quality control techniques are utilized to the extent TI deems necessary to support this warranty Specific testing of all parameters of each device is not necessarily performed except those mandated by government requirements Customers are responsible for their applications using TI components In order to minimize risks associated with the customer s applications adequate design and operating safeguards must be provided by the customer to minimize inherent or procedural hazards Tl assumes no liability for applications assistance or customer product design TI does n
26. ae Note RTS Library Files Are Not Built With mi Option The RTS library files provided with the compiler are not built with the interrupt flexibility option Please refer to the readme file to see how the rts library files were built for your release See Chapter 10 Library Build Utility to build your own rts library files with the interrupt flexibility option a Using the C C Compiler 2 41 Linking C6400 Code With C6200 C6700 Older C6400 Object Code 2 12 Linking C6400 Code With C6200 C6700 Older C6400 Object Code 2 42 In order to facilitate certain packed data optimizations the alignment of top level arrays for the C6400 family was changed from 4 bytes to 8 bytes For C6200 and C6700 code the alignment for top level arrays is always 4 bytes If you are linking C6400 with C6200 6700 code or older C6400 code you may need to take steps to ensure compatibility The following lists the potential alignment conflicts and possible solutions Potential alignment conflicts occur when J Linking new C6400 code with any C6400 code already compiled with the 4 0 tools Lj Linking new C6400 code with code already compiled with any version of the tools for the C6200 or C6700 family Solutions pick one _j Recompile the entire application with the mv6400 switch This solution if possible is recommended because it can lead to better performance 1 Compile the new code with the mb option The mb switch c
27. ahc shell option 2 22 copy string function 9 91 cos function 9 51 cosf function 9 51 cosh function 9 51 coshf function 9 51 cosine functions 9 51 cost based register allocation optimization 3 36 cot function 9 52 cotangent hyperbolic functions 9 52 polar functions 9 52 cotf function 9 52 coth function 9 52 cothf function 9 52 cr linker option 5 2 5 10 cregister keyword 7 8 cross reference listing defined A 3 generating with assembler 2 22 generating with compiler shell 2 33 cross reference utility 1 4 csetjmp header described 9 19 summary of functions and macros 9 30 cstdarg header described 9 19 summary of macros 9 30 cstdio header described 9 20 to 9 21 summary of functions 9 30 to 9 32 cstdlib header described 9 21 summary of functions 9 33 cstring header described 9 22 summary of functions 9 34 ctime function 9 53 Index ctime header described 9 22 summary of functions 9 36 ctype h header described 9 14 summary of functions 9 26 d option shell 2 15 standalone simulator 6 4 data flow optimizations 3 41 data object representation 8 8 data page pointer DP 7 11 data section defined A 3 data types C language 7 3 clock_t 9 22 div_t 9 21 FILE 9 20 fpos_t 9 20 how stored in memory 8 8 jmp_buf 9 19 Idiv_t 9 21 list of 7 6 ptrdiff_t 9 20 size_t 9 20 storage 8 8 struct_tm 9 22 time_t 9 22 va_list 9 19 _DATA_ACCESS macro 9 18 DATA_ALIGN pragma 7 20 DATA_MEM_BANK pragm
28. cinit Tables for explicitly initialized global and static variables const Global and static const variables that are explicitly initialized and con tain string literals switch Jump tables for large switch statements text Executable code and constants b Uninitialized sections Name Contents bss Global and static variables far Global and static variables declared far stack Stack sysmem Memory for malloc functions heap Linking C C Code 5 11 Controlling the Linking Process 5 12 When you link your program you must specify where to allocate the sections in memory In general initialized sections are linked into ROM or RAM uninitialized sections are linked into RAM With the exception of text the ini tialized and uninitialized sections created by the compiler cannot be allocated into internal program memory See section 8 1 1 on page 8 3 for a complete description of how the compiler uses these sections The linker provides MEMORY and SECTIONS directives for allocating sec tions For more information about allocating sections into memory see the linker chapter in the TMS320C6000 Assembly Language Tools User s Guide Controlling the Linking Process 5 5 6 A Sample Linker Command File Example 5 1 shows a typical linker command file that links a C program The command file in this example is named Ink cmd and lists several linker options C Tells the linker to use autoinitialization at run time heap Te
29. eee 2 34 2 10 Using Inline Function Expansion 0 0 0 c eects 2 36 2 10 1 Inlining Intrinsic Operators 0c eens 2 36 2 10 2 Automatic Inlining 0 eee eee tees 2 36 2 10 3 Unguarded Definition Controlled Inlining 00 cece eee 2 37 2 10 4 Guarded Inlining and the _INLINE Preprocessor Symbol 2 38 2 10 5 Inlining Restrictions ssr 0 0 6 eee eens 2 40 2 11 Interrupt Flexibility Options mi Option 0000 eee eee ee ees 2 41 2 12 Linking C6400 Code With C6200 C6700 Older C6400 Object Code 2 42 2 13 Using the Interlist Utility 2 0 2 eet eee eee 2 43 Optimizing Your Code sici ssas eases che ate Oe are a eee ee tee Die bites Dale eee 3 1 Describes how to optimize your C code including such features as software pipelining and loop unrolling Also describes the types of optimizations that are performed when you use the opti mizer 3 1 Invoking Optimization aessa aeaaaee annee 3 2 3 2 Optimizing Software Pipelining 0 0 e eee tenets 3 4 3 2 1 Turn Off Software Pipelining mu Option 2 0 cece eee eee 3 5 3 2 2 Software Pipelining Information 00 cece tenes 3 5 3 2 3 Collapsing Prologs and Epilogs for Improved Performance and Code Size 3 13 3 2 4 Selecting Target CPU Version mv Option 0002 cece eee ee 3 15 3 3 Redundant LOOPS i tenso oae Bendd Ghee vied te Shed Gad edhe wee heeds 3 16 3
30. f y 0 0 Run Time Support Functions 9 87 sprintf Syntax for C Syntax for C Defined in Description sqrt saqrtf Syntax for C Syntax for C Defined in Description Example Syntax for C Syntax for C Defined in Description 9 88 Write Stream include lt stdlib h gt int sprintf char _ string const char _ format include lt cstdlib gt int std sprintf char _string const char _ format sprintf c in rts src The sprintf function writes to the array pointed to by _ string The string pointed to by _ format describes how to write the stream Square Root include lt math h gt double sqrt double x float sqrtf float x include lt cmath gt double std sqrt double x float std sqrtf float x sqrt c and sqrtf c in rts src The sqrt function returns the nonnegative square root of a real number x A domain error occurs if the argument is negative double x y x Y 100 0 sqrt x return value 10 0 See rand srand on page 9 81 Read Stream include lt stdlib h gt int sscanf const char _str const char _ fmt include lt cstdlib gt int std sscanf const char _str const char _ fmt sscanf c in rts src The sscanf function reads from the string pointed to by str The string pointed to by _ format describes how to read the stream Syntax for C Syntax for C Defined in Description Example strcat
31. file copy 2 22 include 2 22 removal function 9 82 rename function 9 82 FILE datatype 9 20 __FILE__ macro 2 25 file h header 9 15 file level optimization 3 18 defined A 4 filename extension specification 2 19 generate function 9 103 specifying 2 18 FILENAME_MAX macro 9 20 find first occurrence of byte function 9 73 fl shell option 2 19 float h header 9 16 to 9 17 floating point math functions 9 18 remainder functions 9 60 summary of functions 9 27 to 9 29 floor function 9 59 floorf function 9 59 flush I O buffer function 9 58 fmod function 9 60 fmodf function 9 60 fo shell option 2 19 fopen function 9 60 FOPEN_ MAX macro 9 20 fpos_t data type 9 20 fprintf function 9 61 fputc function 9 61 fputs function 9 61 fr shell option 2 21 fraction and exponent functions 9 63 fread function 9 62 free function 9 62 freopen function 9 63 frexp function 9 63 frexpf function 9 63 fs shell option 2 21 fscanf function 9 64 fseek function 9 64 fsetpos function 9 64 Index 7 Index ft shell option 2 21 ftell function 9 65 FUNC_CANNOT_INLINE pragma 7 23 FUNC_EXT_CALLED pragma described 7 23 use with pm option 3 22 FUNC_INTERRUPT_THRESHOLD pragma 7 24 FUNC_IS_PURE pragma 7 25 FUNC_IS_SYSTEM pragma 7 25 FUNC_NEVER_RETURNS pragma 7 26 FUNC_NO_GLOBAL_ASG pragma 7 26 FUNC_NO_IND_ASG pragma 7 27 function alphabetic reference 9 37 call bypassing normal calls 9 19 conventions 8 18 to 8 21
32. filenames z link_options object files cl6x Command that runs the compiler and the assembler options Options that affect the way the shell processes input files The options are listed in Table 2 1 on page 2 7 filenames One or more C C source files assembly language source files linear assembly files or object files zZ Option that invokes the linker See Chapter 5 Linking C C Code for more information about invoking the linker link_options Options that control the linking process object files Name of the additional object files for the linking process The z option and its associated information linker options and object files must follow all filenames and compiler options on the command line You can specify all other options except linker options and filenames in any order on the command line For example if you want to compile two files named symtab c and file c assemble a third file named seek asm assembly optimize a fourth file named find sa and suppress progress messages q you enter cl6x q symtab c file c seek asm find sa As cl6x encounters each source file it prints the C C filenames in square brackets assembly language filenames in angle brackets lt gt and lin ear assembly files in braces This example uses the q option to suppress the additional progress information that cl6x produces Entering this command produces these messages symtab c file c l
33. optimizer and the as sembly optimizer to schedule instructions from a loop so that multiple it erations of the loop execute in parallel source file A file that contains C C code or assembly language code that is compiled or assembled to form an object file stand alone preprocessor A software tool that expands macros include files and conditional compilation as an independent program It also per forms integrated preprocessing which includes parsing of instructions stand alone simulator A software tool that loads and runs an executable COFF out file When used with the C I O libraries the stand alone simu lator supports all C I O functions with standard output to the screen static variable A variable whose scope is confined to a function or a program The values of static variables are not discarded when the func tion or program is exited their previous value is resumed when the func tion or program is reentered storage class An entry in the symbol table that indicates how to access a symbol structure A collection of one or more variables grouped together under a single name Glossary symbol A string of alphanumeric characters that represents an address or a value symbol table A portion of a COFF object file that contains information about the symbols that are defined and used by the file symbolic debugging The ability of a software tool to retain symbolic infor mation that can be used by a debugg
34. other code STW outp2 p2 stl name memory reference st1 The directive to indicate a specific memory dependence in the previous exam ple is as follows mdep ld1 stl This means that whenever Id1 accesses memory at location X some later time in code execution st1 may also access location X This is equivalent to adding a dependence between these two instructions In terms of the software pipe line these two instructions must remain in the same order The Id1 reference must always occur before the st1 reference the instructions cannot even be scheduled in parallel It is important to note the directional sense of the directive from Id1 to st1 The opposite from st1 to Id1 is not implied In terms of the software pipeline while every Id1 must occur before every st1 it is still legal to schedule the Id1 from iteration n 1 before the st1 from interation n Using the Assembly Optimizer 4 45 Memory Alias Disambiguation Example 4 16 is a picture of the software pipeline with the instructions from two different iterations in different columns In the actual instruction sequence instructions on the same horizontal line are in parallel Example 4 16 Software Pipeline Using mdep ld1 st1 iteration n iteration n l LDW ldl LDW ldl STW stl STW stl If that schedule does not work because the iteration n st1 might write a value the iteration n 1 Id1 should read then
35. 4 40 Unrolled Dot Product Kernel From Example 4 11 02 ee eee 4 41 Using mptr for Indexed Pointers 0 cc cece eae 4 42 Annotating a Memory Reference 0 cece tenet nee 4 45 Software Pipeline Using mdep Id1 Stl 0c cece eee 4 46 Software Pipeline Using mdep st1 Id1 and mdep Id1 stt 0 0055 4 46 Sample Linker Command File 006 c cece cee eee nett e eee 5 13 Sample Stand Alone Simulator Banners 0 0c cece cence eee eee 6 3 Profiling Dot Product Routines 0 cee eens 6 6 C Code With Clock Function 0 00 cece een eee eens 6 9 Stand Alone Simulator Results After Compiling and Linking Example 6 3 6 9 Define and Use Control Registers 000 c cece eee te eens 7 9 Use of the restrict type qualifier with pointers 0 0 0 cece eee eee ee 7 14 a A I J 0 N Oo L 0 N NNN d ine Contents Use of the restrict type qualifier with arrays 6 cece eee eee 7 14 Using the CODE_SECTION Pragma 00 ccc cece eect eens 7 19 Using the DATA_MEM_BANK Pragma 0c eee eee eee eee eee 7 21 Using the DATA_SECTION Pragma 0 ccc ee eee e eens 7 22 Calling an Assembly Language Function From 0000 cece cnet 8 24 Using the lo and _hi Intrinsics s anana 0 00 cece eens 8 35 Accessing an Assembly Language Vari
36. 7 1 6 Preprocessor 7 4 m The registerstorage class is effective for all chars shorts ints and pointer types For more information see section 7 5 Register Variables on page 7 16 ANSI 3 5 1 K amp R A2 1 Structure members are packed into words ANSI 3 5 2 1 K amp R A8 3 A bit field defined as an integer is signed Bit fields are packed into words and do not cross word boundaries For more information about bit field packing see section 8 2 2 Bit Fields page 8 14 ANSI 3 5 2 1 K amp R A8 3 The interrupt keyword can be applied only to void functions that have no arguments For more information about the interrupt keyword see sec tion 7 4 3 on page 7 10 The preprocessor ignores any unsupported pragma directive ANSI 3 8 6 K amp R A12 8 The following pragmas are supported m CODE_SECTION m DATA_ALIGN m DATA_MEM_BANK m DATA_SECTION m FUNC_CANNOT_INLINE m FUNC_EXT CALLED m FUNC_INTERRUPT_THRESHOLD m FUNC_IS_ PURE m FUNC_IS_ SYSTEM m FUNC_NEVER_RETURNS m FUNC_NO_GLOBAL_ASG m FUNC_NO_IND_ASG E INTERRUPT m MUST_ITERATE m NMI_INTERRUPT m PROB_ITERATE m STRUCT_ALIGN m UNROLL For more information on pragmas see section 7 7 on page 7 18 Characteristics of TAS320C6000 C 7 2 Characteristics of TMS320C6000 C The TMS320C6000 compiler supports C as defined in the ISO IEC 14882 1998 standard The exceptions to the standard are as follows LJ m L O O Complete C standard l
37. 8 2 1 4 double and long double Data Types Double and long double data types are stored in an odd even pair of registers see Figure 8 4 and can only exist in a register in one format as a pair in the format of odd register even register for example A1 A0 The odd memory word contains the sign bit exponent and the most significant part of the man tissa The even memory word contains the least significant part of the mantis sa In little endian mode the lower address is loaded into the even register and the higher address is loaded into the odd register In big endian mode the higher address is loaded into the even register and the lower address is loaded into the odd register In little endian mode if code is loaded from location 0 then the byte at 0 is the lowest byte of the even register In big endian mode if code is loaded from location 0 then the byte at 0 is the highest byte of the odd register Figure 8 4 Double Precision Floating Point Data Storage Format MS Oddregister S E EEE EEEEEEE MMMMMMMMMMMMMMMMMMMM 31 20 0 LS Even registr M MMMMMMMMMMMMMMMMMMMMMMMMMMMM MMM Legend 31 S sign M mantissa E exponent 0 MS most significant LS least significant 8 2 1 5 Structures and Arrays 8 12 A nested structure is aligned to a boundary required by the largest type it contains For example if the largest type in a nested structure is of type short then the nested structure is align
38. About This Manual Preface Read This First The TMS320C6000 Optimizing C C Compiler User s Guide explains how to use these compiler tools Compiler Assembly optimizer Standalone simulator Library build utility C name demangling utility O O O O L The TMS320C6000 C C compiler accepts C as well as American National Standards Institute ANSI standard C source code and produces assembly language source code for the TMS320C6000 device This user s guide discusses the characteristics of the C C compiler It assumes that you already know how to write C C programs The C Programming Language second edition by Brian W Kernighan and Dennis M Ritchie describes C based on the ANSI C standard You can use the Kernighan and Ritchie hereafter referred to as K amp R book as a supplement to this manual References to K amp R C as opposed to ANSI C in this manual refer to the C language as defined in the first edition of Kernighan and Ritchie s The C Programming Language Before you use the information about the C C compiler in this user s guide you should install the C C compiler tools Notational Conventions Notational Conventions This document uses the following conventions m Program listings program examples and interactive displays are shown in a special typeface Examples use a bold version of the special typeface for emphasis interactive displays use abold version of the special typeface
39. Causes the file with the name pointed to by _file to be no longer available by that name Causes the file with the name pointed to by _old_name to be known by the name pointed to by _new_name Sets the file position indicator for the stream pointed to by _ fp to the beginning of the file Performs the same function as fscanf but reads input from stdin Returns no value setbuf is a restricted version of setvbuf and defines and associates a buffer with a stream Defines and associates a buffer with a stream Performs the same function as fprintf but writes to the array that _ string points to Performs the same function as fscanf but reads from the string that _ str points to Creates a temporary file Generates a string that is a valid filename that is the filename is not already being used Pushes the character specified by _c back into the input stream pointed to by _ fp Performs the same function as fprintf but re places the argument list with _ap Performs the same function as printf but replaces the argument list with _ap Performs the same function as sprintf but re places the argument list with _ap Page 9 80 9 82 9 82 9 83 9 84 9 84 9 86 9 88 9 88 9 103 9 103 9 105 9 107 9 107 9 108 g General functions stdlib h cstdlib Function void abort void int abs int i int atexit void fun void double atof const char st int atoi register cons
40. Defined in Description Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C Defined in Description putchar Write to Standard Output include lt stdio h gt int printf const char _ format include lt cstdio gt int std printf const char _ format printf c in rts src The printf function writes to the standard output device The string pointed to by _ format describes how to write the stream Write Character include lt stdio h gt int putc int _x FILE _fp include lt cstdio gt int std putc int _x FILE _fp fputc c in rts src The putc function writes a character to the stream pointed to by _ fp Write Character to Standard Output include lt stdlib h gt int putchar int _ x include lt cstdlib gt int std putchar int _ x fputc c in rts src The putchar function writes a character to the standard output device Run Time Support Functions 9 79 puts Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C Defined in Description Example 9 80 Write to Standard Output include lt stdlib h gt int puts const char _ptr include lt cstdlib gt int std puts const char _ptr fputs c in rts src The puts function writes the string pointed to by _ptr to the standard output device Array Sort include lt stdlib h gt void qsort void base size_t nmemb size_t size i
41. Glossary A 5 Glossary macro A user defined routine that can be used as an instruction macro call The process of invoking a macro macro definition A block of source statements that define the name and the code that make up a macro macro expansion The process of inserting source statements into your code in place of a macro call map file An output file created by the linker that shows the memory configuration section composition section allocation symbol defini tions and the addresses at which the symbols were defined for your pro gram memory map Amap of target system memory space that is partitioned into functional blocks object file An assembled or linked file that contains machine language ob ject code object library An archive library made up of individual object files operand An argument of an assembly language instruction assembler di rective or macro directive that supplies information to the operation per formed by the instruction or directive optimizer A software tool that improves the execution speed and reduces the size of C programs See also assembly optimizer options Command line parameters that allow you to request additional or specific functions when you invoke a software tool output module A linked executable object file that is downloaded and executed on a target system output section A final allocated section in a linked executable module Glossary parser A s
42. Invokes the assembler with the hi assembler option to tell the assembler to include the specified file for the assembly module The file is included before source file statements The included file does not appear in the assembly listing files Invokes the assembler with the l lowercase L assembler option to produce an assembly listing file Invokes the assembler with the s assembler option to put la bels in the symbol table Label definitions are written to the COFF symbol table for use with symbolic debugging Undefines the predefined constant name which overrides any ad options for the specified constant Invokes the assembler with the x assembler option to pro duce a symbolic cross reference in the listing file For more information about assembler options see the TMS320C6000 Assembly Language Tools User s Guide Setting Default Shell Options C_OPTION and C_C6X_OPTION 2 4 Setting Default Shell Options C_OPTION and C_C6X_OPTION You might find it useful to set the compiler assembler and linker shell default options using the C6X_C_OPTION or C_OPTION environment variable If you do this the shell uses the default options and or input filenames that you name with C6X_C_OPTION or C_OPTION every time you run the shell Setting the default options with these environment variables is useful when you want to run the shell consecutive times with the same set of options and or input files After the shell reads
43. STW STW const ushort amp _amem2_const const LDHU Allows aligned loads and stores of 2 C6400 void ptn bytes to memory const uint amp _amem4_const const LDW Allows aligned loads and stores of 4 C6400 void ptn bytes to memory const double amp _amemd8_const const LDDW Allows aligned loads and stores of 8 C6400 void ptn f bytes to memoryt LDW LDW int _avg2 int src1 int src2 AVG2 Calculates the average for each pair C6400 of signed 16 bit values unsigned _avgu4 unsigned unsigned AVGU4 Calculates the average for each pair C6400 of signed 8 bit values unsigned _bitc4 unsigned src BITC4 For each of the 8 bit quantities in src C6400 the number of 1 bits is written to the corresponding position in the return value unsigned _bitr unsigned src BITR Reverses the order of the bits C6400 uint _clr uint src2 uint csta uint cstb CLR Clears the specified field in src2 The beginning and ending bits of the field to be cleared are specified by csta and cstb respectively uint _clrr uint src2 int src1 CLR Clears the specified field in src2 The beginning and ending bits of the field to be cleared are specified by the low er 10 bits of src1 int _cmpeq2 int src1 int src2 CMPEQ2 Performs equality comparisons on C6400 t Instructions not specified with a device apply to all C6000 devices See the Tms320C6000 Programmer s Guide for more information each pair of 16 bit values Equality results are packed into the two least sig
44. SUB4 Performs 2s complement subtraction between pairs of packed 8 bit values C6400 int _subabs4 int src7 int src2 SUBABS4 Calculates the absolute value of the differences for each pair of packed 8 bit values C6400 uint _swap4 uint src SWAP4 Exchanges pairs of bytes an endian swap within each 16 bit value C6400 uint _unpkhu4 uint src UNPKHU4 Unpacks the two high unsigned 8 bit values into unsigned packed 16 bit values C6400 uint _unpklu4 uint src UNPKLU4 Unpacks the two low unsigned 8 bit values into unsigned packed 16 bit values C6400 uint _xpnd2 uint src XPND2 Bits 1 and 0 of src are replicated to the upper and lower halfwords of the result respectively C6400 uint _xpnd4 uint src t Instructions not specified with a device apply to all C6000 devices See the Tms320C6000 Programmer s Guide for more information XPND4 Bits 3 and 0 of src are replicated to bytes 3 through 0 of the result See section 8 5 3 Using Unaligned Data and 64 Bit Values for details on manipulating 8 byte data quantities 8 34 C6400 Interfacing C and C With Assembly Language 8 5 3 Using Unaligned Data and 64 Bit Values The C6400 family has support for unaligned loads and stores of 64 bit and 32 bit values via the use of the _memd8 and _mem4 intrinsics Since the com piler does not yet support a 64 bit integer type the double type must be used
45. The character typing functions include isalnum isalpha isascii iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit Identifies alphanumeric ASCII characters tests for any character for which isalpha or isdigit is true Identifies alphabetic ASCII characters tests for any character for which islower or isupper is true Identifies ASCII characters any character 0 127 Identifies control characters ASCII characters 0 31 and 127 Identifies numeric characters between 0 and 9 inclusive Identifies any nonspace character Identifies lowercase alphabetic ASCII characters Identifies printable ASCII characters including spaces ASCII characters 32 126 Identifies ASCII punctuation characters Identifies ASCII tab horizontal or vertical space bar carriage return form feed and new line characters Identifies uppercase ASCII alphabetic characters Identifies hexadecimal digits 0 9 a f A F The C C compiler also supports a set of macros that perform these same functions The macros have the same names as the functions but are prefixed with an underscore for example _isascii is the macro equivalent of the isascii function In general the macros execute more efficiently than the functions Idexp Idexpf Syntax for C Syntax for C Defined in Description Example Syntax for C Syntax for C Defined in Description localtime See abs labs on page 9 37
46. The return value is an angle in the range 7 T radians double rvalu 0 0 rvalv 1 0 radians radians atan2 rvalu rvalv radians 0 0 Hyperbolic Arc Tangent define TIENHANCED_MATH_H 1 include lt math h gt double atanh double y double x float atanhf float x define TIENHANCED_MATH_H 1 include lt cmath gt double std atanh double y double x float std atanhf float x atanh c and atanhf c in rts src The atanh and atanhf functions return the hyperbolic arc tangent of a floating point argument x The return value is in the range 1 0 1 0 Register Function Called by Exit include lt stdlib h gt int atexit void fun void include lt cstdlib gt int std atexit void fun void exit c in rts src The atexit function registers the function that is pointed to by fun to be called without arguments at normal program termination Up to 32 functions can be registered When the program exits through a call to the exit function the functions that were registered are called without arguments in reverse order of their registration atof atoi atol atof atoi atol Convert String to Number Syntax for C include lt stdlib h gt double atof const char st int atoi register const char st long atol register const char st Syntax for C include lt csitdlib gt double std atof const char st int std atoi register const char st long std atol register c
47. V Prints a help screen that provides an online summary of the C name demangler options Outputs to the given file rather than to standard out Specifies that external names do not have a C prefix Enables verbose mode outputs a banner Sample Usage of the C Name Demangler 11 3 Sample Usage of the C Name Demangler Example 11 1 shows a sample C program and the resulting assembly that is output by the 6x compiler in Example 11 1 b the linknames of foo and compute are mangled that is their signature information is encoded into their names Example 11 1 Name Mangling a C Program int compute int val int err int foo short val int err static int last_err 0 int result 0 if last_err 0 result compute int val amp last_err err last_err return result C Name Demangler 11 3 Sample Usage of the C Name Demangler b Partial resulting assembly for foo FERRE REAR ICR SK ISA IER AA SSSR IKARIA LASSE IRR FISK IER AA KEK RH FUNCTION NAME _foo short int ig Te POO IG A IIE RCIA HN PREPAC EY ENZO ON SIT RCRA POR PART AE IND PIS NS OTRAS ee Pe REI RNS NCS I foo_ FsPi LDW D2T2 DP _last_err 1 BO0 MVK S1 _last_err 1 bss A0 NOP 3 BO B sol L1 STW DZEZ B10 SP 8 STW D2 T2 B3 SP 4 I MVKL S2 RLO B3 MVKH aoe RLO B3 i MV D2 B4 B10 ADD L2X DP AO B4 ZERO L1 AO BO LDW D2T2 SP 4 B3 NOP 1
48. a 1 a l1 MPY M2X B8 A4 B7 25 a 2 b 2 MPYH M1X B8 A4 A0 26 a 3 b 3 BO ADD S2 Oxfffffffc BO BO 30 cnt 4 Al LDW D1T1 A5 8 A4 16 load a 0 1 The kernel displayed in Example 4 3 is not the best possible kernel to use This kernel cannot be scheduled in two cycles because the cross path indi cated by the X appended to the functional unit specifier is repeated too many times The assembly optimizer automatically embeds a comment in the sched uled assembly indicating this so that you do not have to analyze the output by hand Example 4 4 shows the cross paths in the software pipeline informa tion generated by the assembly optimizer Using the Assembly Optimizer 4 11 What You Need to Know to Write Linear Assembly Example 4 4 Software Pipeline Information for Example 4 2 S e a F FF F FF F F F F FF FF FF F FF F F FF F F a F FF FF F KF F SOFTWARE PIPELIN E INFORMATION Known Minimum Tr Known Max Trip C Loop Carried Dep Unpartitioned Re Partitioned Reso Resource Partiti A side B side units 0 0 units 1 0 units 2 2 units 2 2 cross paths 3 address paths Long read paths Long write paths Logical ops LS Addition ops L Bound L S LS Bound L S D Hx UGH Searching for so ii 3 Schedule done Loop label loop ip Count 25 ount Factor 1 endency Bound 0 source Bound 2 urce Bound 3
49. b RS Cy XY d XY 2 xa i0a A0 a and b always conflict with each other b i0b BO Al ct ila c and d never conflict with each other B2 d ilb F 4 42 Avoiding Memory Bank Conflicts With the Assembly Optimizer 4 5 4 Memory Bank Conflict Algorithm The assembly optimizer uses the following process to determine if two memory access instructions might have a memory bank conflict 1 If either access does not have memory bank information then they do not conflict 2 If both accesses do not have the same base then they conflict 3 The offset stride access width and iteration delta are used to determine if a memory bank conflict will occur The assembly optimizer uses a straightforward analysis of the access patterns and determines if they ever access the same relative bank The stride and offset values are always expressed in bytes The iteration delta is the difference in the loop iterations of the memory references being scheduled in the software pipeline For example given three instructions A B C and a software pipeline with a single cycle ker nel then A and C have an iteration delta of 2 A B C ouw Rp Using the Assembly Optimizer 4 43 Memory Alias Disambiguation 4 6 Memory Alias Disambiguation 4 6 1 Memory aliasing occurs when two instructions can access the same memory location Such memory references are called ambiguous Memory alias dis ambiguation is the process of d
50. chs include lt cstring gt size_t std strspn register const char string const char chs strspn c in rts src The strspn function returns the length of the initial segment of string which is entirely made up of characters in chs If the first character of string is notin chs the strspn function returns 0 char stra who is there char strb abcdefghijklmnopqrstuvwxyz char strce abcdefg size_t length length strspn stra strb length length strspn stra strc length Find Matching String include lt string h gt char strstr register const char string1 const char string2 include lt cstring gt char std strstr register const char string1 const char string2 strstr c in rts src The strstr function finds the first occurrence of string2 in string1 excluding the terminating null character If strstr finds the matching string it returns a pointer to the located string if it does not find the string it returns a null pointer If string2 points to a string with length 0 strstr returns string1 char stra so what do you want for nothing char strb what char ptr ptr strstr stra strb The pointer ptr now points to the w in what in the first string Run Time Support Functions 9 99 strtod strtol strtoul strtod strtol strtoul Syntax for C Syntax for C Defined in Description 9 100 String to Number include lt stdli
51. code 5 1 to 5 14 individually 5 2 object library 9 2 with run time support libraries 5 8 with the shell program 5 4 linking C6400 code with C6200 C6700 Older C6400 object code 2 42 linknames generated by the compiler 7 32 listing file creating cross reference 2 22 defined A 5 generating with preprocessor 2 34 little endian changing to big 2 16 defined A 5 _LITTLE_ENDIAN macro 2 24 Ink6x 5 2 load6x 6 2 loader defined A 5 using with linker 7 33 local time convert broken down time to local time 9 76 convert calendar to local time 9 53 described 9 23 local variables accessing 8 21 Index localtime function 9 69 log function 9 70 log10 function 9 70 log10f function 9 70 log2 function 9 71 log2f function 9 71 logf function 9 70 longjmp function 9 19 9 85 loop rotation optimization 3 44 loop unrolling defined A 5 loop invariant optimizations 3 44 loops expand compiler knowledge with _nassert 8 35 optimization 3 43 redundant 3 16 software pipelining 3 4 to 3 15 low level I O functions 9 15 Iseek I O function 9 7 Itoa function 9 71 m linker option 5 7 ma shell option 3 25 macro defined A 6 macro call defined A 6 macro defined definition A 6 macro defined expansion A 6 macros _CODE_ACCESS 9 18 _DATA_ACCESS 9 18 _FAR_RTS 9 18 _IDECL 9 18 alphabetic reference 9 37 BUFSIZ 9 20 CLOCKS_PER_SEC 9 23 EOF 9 20 expansions 2 24 to 2 25 FILENAME_MAX_ 9 20 FOPEN_MAX 9 20 HUGE_VAL 9 18 L_tmpnam 9 20 NASSERT 9 14 ND
52. eaa E EAEE OE AAEREN S 8 47 8 8 4 Autoinitialization of Variables at Run Time ssssssaaaaaaaa anaana 8 50 8 8 5 Initialization of Variables at Load Time 0 cee ee eee eee ee 8 51 Run Time Support Functions 000 eects 9 1 Describes the libraries and header files included with the C C compiler as well as the mac ros functions and types that they declare Summarizes the run time support functions accord ing to category header Provides an alphabetical reference of the non ANSI run time support functions gA BDOS wt d Aa ek lee edie Ge eats ly hae a hace tack E E O 9 2 9 1 1 Linking Code With the Object Library 00 cece eee eee 9 2 9 1 2 Modifying a Library Function 0 c eee 9 3 9 1 3 Building a Library With Different Options 0c cece eee ee 9 3 9 2 The C VO FUnctionssicinet oaren trader ara biel digg di hedaiee ds 9 4 9 2 1 Overview of Low Level I O Implementation 000 cece eee eee 9 5 9 2 2 Adding a Device for C V O eee eet 9 11 9 3 Heada Fiecare rrhevnet aed Ounnier reiguenre diate ed Kuedicioad TE 9 13 9 3 1 Diagnostic Messages assert h cassert 0 cee eee eee 9 14 9 3 2 Character Typing and Conversion ctype h cctype 2 0 ee 9 14 9 3 3 Error Reporting errno h cerrno 0 6 eee eee 9 15 9 3 4 Low Level Input Output Functions file h 0020 e eee eee 9 15 9 3 5 Fast Macros Static Inline
53. gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt EN ERING plus PO COG GGG GGG GGG GGG GGG GGG GGG GG GGG GG GGG GGG GGG EAVING plus p gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt EN ERING plus 1 SSK KK KK KKK KKK EAVING plus B S92 B3 NOP 4 r MVK S1 12 A4 BRANCH OCCURS 3 13 7 Induction Variables and Strength Reduction Induction variables are variables whose value within a loop is directly related to the number of executions of the loop Array indices and control variables for loops are often induction variables Strength reduction is the process of replacing inefficient expressions involving induction variables with more efficient expressions For example code that indexes into a sequence of array elements is replaced with code that incre ments a pointer through the array Induction variable analysis and strength reduction together often remove all references to your loop control variable allowing its elimination see Example 3 4 on page 3 36 Optimizing Your Code 3 43 What Kind of Optimization Is Being Performed 3 13 8 Loop Invariant Code Motion This optimization identifies expressions within loops that always compute to the same value
54. int _mpyus uint src1 int src2 MPYUS Values can be signed or unsigned int_mpysu int src1 uint src2 MPYSU uint _mpyu uint src1 uint src2 MPYU int_mpyh int src1 int src2 MPYH Multiplies the 16 MSBs of src1 by the int_mpyhus uint src7 int src2 MPYHUS To SBS oF ice ane uns tne result Values can be signed or un int_mpyhsu int src7 uint src2 MPYHSU signed uint_mpyhu uint src7 uint src2 MPYHU int_mpyhl int src7 int src2 MPYHL Multiplies the 16 MSBs of src1 by the int_mpyhuls uint src7 int src2 MPYHULS 16 LSBs of sro2 ane returnis the result Values can be signed or unsigned int_mpyhslu int src7 uint src2 MPYHSLU uint_mpyhlu uint src7 uint src2 MPYHLU int_mpyhl int src7 int src2 MPYLH Multiplies the 16 LSBs of src1 by the int_mpyluhs uint src1 int src2 mPYLuHs 16 MSBs of src2 and returns the result Values can be signed or un int_mpylshu int src7 uint src2 MPYLSHU signed uint_mpylhu uint src7 uint src2 MPYLHU double _mpy2 int src7 int src2 MPY2 Returns the products of the lowerand C6400 higher 16 bit values in src1 and src2 double _mpyhi int src7 int src2 MPYHI Produces a 16 by 32 multiply The re C6400 double _mpyli int src1 int src2 MPYLI sult is placed into the lower 48 bits of the returned double Can use the upper or lower 16 bits of src1 t Instructions not specified with a device apply to all C6000 devices See the Tms320C6000 Programmer s Guide for more information See section 8
55. mation see sections 8 8 4 Autoinitialization of Variables at Run Time on page 8 50 and 8 8 5 Initialization of Variables at Load Time on page 8 51 Also see section 7 9 Initializing Static and Global Variables on page 7 33 8 8 2 Global Constructors 8 46 All global C variables that have constructors must have their constructor called before main The compiler builds a table of global constructor ad dresses that must be called in order before main in a section called pinit The linker combines the pinit section form each input file to form a single table in the pinit section The boot routine uses this table to execute the construc tors 8 8 3 System Initialization Initialization Tables The tables in the cinit section consist of variable size initialization records Each variable that must be autoinitialized has a record in the cinit section Figure 8 7 shows the format of the cinit section and the initialization records Figure 8 7 Format of Initialization Records in the cinit Section cinit section Initialization record 1 Initialization record 2 N Initialization record Initialization record 3 N N Size in Pointer to Initialization l e l DN bytes bss area data I e l Initialization record n The fields of an initialization record contain the following information I The first field of an initialization record is the size in bytes of the initializa tion data I
56. sum0 suml1 A4 return A4 endproc 0 0 load a 0 1 bankx load b 0 1 banky a 0 b 0 a l b 1 sum0 alf 0 b 0 suml a l b 1 load a 2 3 bankx 2 load b 2 3 banky 2 alzi b 2 a 3 b 3 sum0 a 2 b 2 suml a 3 b 3 1 if 0 goto loop compute final result 4 40 Avoiding Memory Bank Conflicts With the Assembly Optimizer The goal is to find a software pipeline in which the following instructions are in parallel LDW a0 2 vall load a 0 1 bankx LDW a24 2 val2 load a 2 3 bankx 2 LDW b0 2 vall load b 0 1 banky LDW b2 2 val2 load b 2 3 banky t2 Example 4 13 Unrolled Dot Product Kernel From Example 4 11 L3 PIPE LOOP KERNEL ADD L2 B6 B9 B9 sum0 a 0 b 0 ADD L1 A6 A0 A0 suml a l b 1 MPY M2X B5 A4 B6 7 a O b 0 MPYH M1X B5 A4 A6 a l b 1 BO B ol Ls 7 if 0 goto loop LDW D1 A3 8 A4 load a 2 3 bankx 2 LDW D2 B4 8 B5 load a 0 1 bankx ADD L2 B6 B9 B9 sum0 a 2 b 2 ADD L1 A6 A0 A0 suml a 3 b 3 MPY M2X A4 B8 B6 a 2 b 2 MPYH M1X A4 B8 A6 7 a 3 b 3 BO ADD S2 1 B0 B0 7 i LDW D2 B7 8 B8 load b 2 3 banky 2 LDW D1 A5 8 A4 load b 0 1 banky Without the mptr directives in Example 4 12 the loads of a 0 1 and b 0 1 are scheduled in parallel and
57. 0 char stra who is there char strb abcdefghijklmnopgqrstuvwxyz char strce abcdefg size_t length length strespn stra strb length length strespn stra strc length String Error include lt string h gt char strerror int errno include lt cstring gt char std strerror int errno strerror c in rts src The strerror function returns the string string error This function is supplied to provide ANSI compatibility Syntax for C Syntax for C Defined in Description sirftime Format Time include lt time h gt size_t strftime char out size_t maxsize const char format const struct tm time include lt ctime gt size_t std strftime char out size_t maxsize const char format const struct tm time strftime c in rts src The strftime function formats a time pointed to by time according to a format string and returns the formatted time in the string out Up to maxsize characters can be written to out The format parameter is a string of characters that tells the strftime function how to format the time the following list shows the valid characters and describes what each character expands to Character Expands to a The abbreviated weekday name Mon Tue A The full weekday name b The abbreviated month name Jan Feb B The locale s full month name C The date and time representation d The day of the month as a
58. 0 0 0c cee ee eee eee ees 7 34 7 10 1 Compatibility With K amp R C pk Option 0 cece ee 7 34 7 10 2 Enabling Strict ANSI Mode and Relaxed ANSI Mode ps and pr Options 7 36 7 10 3 Enabling Embedded C Mode pe Option 0000 eee eee 7 36 Run Time Environment 0 0 cece eee eee eee eee een eenneees 8 1 Discusses memory and register conventions stack organization function call conventions and system initialization Provides information needed for interfacing assembly language to C programs 8 1 Memory Model s c 034ct de cinta ceed eps bee ee ee tee 8 2 Beds SSCUOMS Ie Sek ea rine aah ee Renta S Rance Ahan Ay e e a aa ENET 8 3 8 1 2 C C System Stack 00 teens 8 4 8 1 3 Dynamic Memory Allocation 0 cece cet 8 5 8 1 4 Initialization of Variables 0 0 ketenes 8 6 8 1 5 Memory Models ereere ri enan EAr eet eens 8 6 8 1 6 Position Independent Data 0 eee 8 7 8 2 Object Representation 0 ccc ccc n naana 8 8 8 2 1 Data Type Storage cent eens 8 8 8 2 2 TBI ICING tcs ra raae ee a aaa a a a af veka eel erate cee EA 8 14 8 2 3 Character String Constants essas e saanen tetas 8 15 8 3 Register Conventions scesieees Kiee bike este yankee st DERE eee ds seeds seals 8 16 Contents xi Contents xii 8 4 Function Structure and Calling Conventions 0000 eee ee eee es 8 18 8 4 1 How a Function Makes
59. 4 Reducing Code Size ms Option 6 20 c cece eens 3 17 3 5 Performing File Level Optimization 03 Option cece eee eee 3 18 3 5 1 Controlling File Level Optimization oln Option 00005 3 18 3 5 2 Creating an Optimization Information File onn Option 3 19 3 6 Performing Program Level Optimization om and 03 Options 3 20 3 6 1 Controlling Program Level Optimization opn Option 3 21 3 6 2 Optimization Considerations When Mixing C C and Assembly 3 22 3 7 Indicating Whether Certain Aliasing Techniques Are Used 2022 055 3 25 3 7 1 Use the ma Option When Certain Aliases are Used 5 3 25 3 7 2 Use the mt Option to Indicate That These Techniques Are Not Used 3 26 3 7 3 Using the mt Option With the Assembly Optimizer 3 27 3 8 Prevent Reordering of Associative Floating Point Operations 3 28 3 9 Use Caution With asm Statements in Optimized Code 0200 eee ee 3 28 3 10 Automatic Inline Expansion oi Option 000 ccs 3 29 3 11 Using the Interlist Utility With the Optimizer 0 3 30 Contents 3 12 Debugging and Profiling Optimized Code 0 ccc eee ee 3 33 3 12 1 Debugging Optimized Code g gw and o Options 3 33 3 12 2 Profiling Optimized Code gp and o Opti
60. 6400 _TMS320C6700 Defined if target is 6700 _LITTLE_ENDIAN Defined if little endian mode is selected the me option is not used otherwise it is undefined _BIG_ENDIAN Defined if big endian mode is selected the me option is used otherwise it is undefined _LARGE_MODEL Defined if large model mode is selected the ml option is used otherwise it is undefined LARGE_MODEL_OPTION _ Set to the large model specified by mlIn otherwise it is undefined _SMALL_MODEL Defined if small model mode is selected the ml option is not used otherwise it is undefined t Specified by the ANSI standard 2 24 Controlling the Preprocessor Table 2 2 Predefined Macro Names Continued Macro Name Description __LINE__Tt Expands to the current line number __FILE__t Expands to the current source filename __DATE__t Expands to the compilation date in the form mmm dd YYYY __TIME__t Expands to the compilation time in the form hh mm ss _INLINE Expands to 1 if optimization is used undefined otherwise Regardless of any optimization always undefined when pi is used __STDC__t Defined to indicate that compiler conforms to ANSI C Standard See section 7 1 Characteristics of TMS320C6000 C on page 7 2 for exceptions to ANSI C conformance Tt Specified by the ANSI standard You can use the names listed in Table 2 2 in the same manner as any other defined name For example printf s Ss TIME DATE__
61. 78 powf function 9 78 powi function 9 78 powif function 9 78 ppa shell option 2 27 ppc shell option 2 28 ppd shell option 2 28 ppi shell option 2 28 ppl shell option 2 28 ppo shell option 2 27 pr shell option 7 36 pragma defined A 7 pragma directive 7 4 pragma directives 7 18 to 7 31 CODE_SECTION 7 19 DATA_ALIGN 7 20 DATA_MEM_BANK_ 7 20 DATA_SECTION 7 22 FUNC_CANNOT_INLINE 7 23 FUNC_EXT_CALLED 7 23 FUNC_INTERRUPT_THRESHOLD 7 24 FUNC_IS_ PURE 7 25 FUNC_IS_SYSTEM 7 25 FUNC_NEVER_RETURNS 7 26 FUNC_NO_GLOBAL_ASG 7 26 FUNC_NO_IND_ASG_ 7 27 INTERRUPT 7 27 MUST_ITERATE 7 28 NMILINTERRUPT 7 29 PROB_ITERATE 7 29 Index 14 pragma directives continued STRUCT_ALIGN 7 30 UNROLL 7 31 predefined names ad shell option 2 22 undefining with au shell option 2 22 preinitialized variables global and static 7 33 preprocessed listing file generating raw information 2 34 generating with line directives 2 28 generating with comments 2 28 preprocessor controlling 2 24 to 2 28 defined A 7 directives inC language 7 4 error messages 2 24 _INLINE symbol 2 38 options 2 27 to 2 28 predefining constant names for 2 15 symbols 2 25 prevent reordering of associative floating point op erations 3 28 printf function 9 79 PROB_ITERATE pragma 7 29 proc directive 4 26 processor time function 9 50 profiling optimized code 3 34 program termination functions abort function 9 37 atexit function 9 46 exit func
62. 8 36 Using the asm Statement 0 0 cece tee ence ete eens 8 38 Initializing Variables 0 eaa ea a eee eee eens 8 46 Use Unique Function Names 0 cent ent tenet ete eee 9 11 Writing Your Own Clock Function 20 essas eeaeee enee 9 23 Writing Your Own Clock Function 000 0c cece tte teen eee teens 9 50 No Previously Allocated Objects Are Available After minit 0 0 cece eee nee 9 75 The time Function Is Target System Specific a na 0 0 cect eee 9 103 xviii Chapter 1 Introduction The TMS320C6000 is supported by a set of software development tools which includes an optimizing C C compiler an assembly optimizer an as sembler a linker and assorted utilities This chapter provides an overview of these tools and introduces the features of the optimizing C C compiler The assembly optimizer is discussed in Chapter 4 The assembler and linker are discussed in detail in the TMS320C6000 Assembly Language Tools User s Guide Topic Page 1 1 Software Development Tools Overview 000ee eee eee 1 2 1 2 C C Compiler Overview cccee cece eee eeee 1 5 Software Development Tools Overview 1 1 Software Development Tools Overview Figure 1 1 illustrates the C6000 software development flow The shaded por tion of the figure highlights the most common path of software development for C language programs The other portions are peri
63. 9 18 list of 9 13 math h header 9 18 new header 9 24 setimp h header 9 19 stdarg h header 9 19 stddef h header 9 20 stdio h header 9 20 to 9 21 stdlib h header 9 21 string h header 9 22 time h header 9 22 to 9 23 typeinfo header 9 24 heap align function 9 72 described 8 5 reserved space 8 3 heap linker option 5 6 with malloc 9 72 heap size function 9 81 hex conversion utility defined A 4 described 1 4 HUGE_VAL macro 9 18 hyperbolic math functions described 9 18 hyperbolic arc cosine functions 9 38 hyperbolic arc cotangent functions 9 40 hyperbolic arc sine functions 9 44 hyperbolic arc tangent functions 9 46 hyperbolic cosine functions 9 51 hyperbolic cotangent functions 9 52 hyperbolic sine functions 9 87 hyperbolic tangent functions 9 102 i option linker 5 6 shell 2 16 2 26 1 0 adding a device 9 11 described 9 4 functions close 9 7 flush buffer 9 58 Iseek 9 7 open 9 8 read 9 9 rename 9 9 unlink 9 10 write 9 10 implementation overview 9 5 low level definitions 9 15 summary of functions 9 30 to 9 32 _IDECL macro 9 18 identifiers in C language 7 2 implementation defined behavior 7 2 to 7 4 Index include files adding a directory to be searched 2 16 specifying asearch path 2 25 using ahi shell option 2 22 preprocessor directive 2 25 indirect call defined A 4 initialization at load time defined A 4 described 8 51 of variables 7 33 at load time 8 6 atruntime 8 6 types 5
64. A 2 memory allocation 5 11 boot obj 5 8 5 10 branch optimizations 3 38 bsearch function 9 48 bss section allocating in memory 5 11 defined A 2 described 8 3 buffer define and associate function 9 86 specification function 9 84 BUFSIZE macro 9 20 byte defined A 2 C extension 2 18 cextension 2 18 c library build utility option 10 4 c option how shell and linker options differ 5 5 linker 5 2 5 10 shell 2 15 C language characteristics 7 5 C name demangler described 1 7 11 1 example 11 3 to 11 5 invoking 11 2 options 11 2 C C compiler defined A 2 described 1 3 C C language accessing assembler constants 8 40 accessing assembler global variables 8 39 accessing assembler variables 8 39 characteristics 7 2 to 7 4 const keyword 7 7 constants 7 2 to 7 4 conversions 7 3 to 7 4 cregister keyword 7 8 datatypes 7 3 to 7 4 declarations 7 4 expressions 7 3 to 7 4 far keyword 7 11 to 7 13 identifiers 7 2 to 7 4 interlisting with assembly 2 43 interrupt keyword 7 10 near keyword 7 11 to 7 13 Index C C language continued placing assembler statements in 8 38 pragmas 7 4 pragma directives 7 18 to 7 31 restrict keyword 7 14 volatile keyword 7 15 C_C6X_OPTION 2 23 C_DIR environment variable 2 25 2 27 C6X_C_DIR environment variable 2 25 2 27 _c_int0O described 5 10 C_OPTION 2 23 calendar time ctime function 9 53 described 9 23 difftime function 9 53 mktime function 9 76 time function 9 10
65. C code 5 1 Invoking the Linker as an Individual Program 0 cece eee eee es 5 2 5 2 Invoking the Linker With the Compiler Shell z Option 2 00000 5 4 5 3 Disabling the Linker c Shell Option 2 00000 c cece eee eee ees 5 5 5 4 Linker Options mare teite ravnene e e a a aad ae et ie 5 6 5 5 Controlling the Linking Process 00 cece cece eee eee ees 5 8 5 5 1 Linking With Run Time Support Libraries 0000s 5 8 5 5 2 Run Time Initialization 0 0 eens 5 9 5 5 3 Global Variable Construction essee eeunenn 5 10 5 5 4 Specifying the Type of Initialization 0 0 cece eee 5 10 5 5 5 Specifying Where to Allocate Sections in Memory 000e eee 5 11 5 5 6 A Sample Linker Command File 0 00 eee eee eee eee 5 13 5 5 7 Using Function Subsections mo Shell Option 0085 5 14 6 Using the Stand Alone Simulator 000 c cece eee eee eee eee eee 6 1 Describes how to invoke the stand alone simulator and provides an example 6 1 Invoking the Stand Alone Simulator 0 cece eect ett 6 2 6 2 Stand Alone Simulator Options 000 cette eens 6 4 6 3 Using the Profiling Capability of the Stand Alone Simulator 6 6 6 4 Selecting Silicon Revision to Simulate rev Option 0c eee eee 6 8 6 5 Stand Alone Simulator Example 00
66. Concatenate Strings include lt string h gt char streat char string1 const char string2 include lt cstring gt char std streat char string1 const char string2 strcat c in rts src The strcat function appends a copy of string2 including a terminating null character to the end of string1 The initial character of string2 overwrites the null character that originally terminated string1 The function returns the value of string1 String1 must be large enough to contain the entire string In the following example the character strings pointed to by a b and c are assigned to point to the strings shown in the comments In the comments the notation 0 represents the null character char a b c a gt The quick black fox 0 7 b gt jumps over 0 c gt the lazy dog 0 strcat a b a gt The quick black fox jumps over 0 x b gt jumps over 0 Z e gt the lazy dog 0 strcat a c a gt The quick black fox jumps over the lazy dog 0 b gt jumps over 0 Bf c gt the lazy dog 0 Run Time Support Functions 9 89 strcehr Syntax for C Syntax for C Defined in Description Example strcmp sitrcoll Syntax for C Syntax for C Defined in Description 9 90 Find First Occurrence of a Character include lt string h gt char strchr const char string int c include lt
67. Implementation 7 33 Changing the ANSI C language Mode 7 10 Changing the ANSI C language Mode The pk pr and ps options let you specify how the C C compiler interprets your source code You can compile your source code in the following modes Li Normal ANSI mode Li K amp R C mode Lj Relaxed ANSI mode g Strict ANSI mode The default is normal ANSI mode Under normal ANSI mode most ANSI viola tions are emitted as errors Strict ANSI violations those idioms and allow ances commonly accepted by C C compilers although violations with a strict interpretation of ANSI however are emitted as warnings Language ex tensions even those that conflict with ANSI C are enabled For C code ANSI mode designates the latest supported working paper K amp R C mode does not apply to C code 7 10 1 Compatibility With K amp R C pk Option 7 34 The ANSI C C language is a superset of the de facto C standard defined in Kernighan and Ritchie s The C Programming Language Most programs writ ten for other non ANSI compilers correctly compile and run without modifica tion There are subtle changes however in the language that can affect existing code Appendix C in The C Programming Language second edition referred to in this manual as K amp R summarizes the differences between ANSI C and the first edition s C standard the first edition is referred to in this manual as K amp R To simplify the process o
68. Multiply by a Power of 2 include lt math h gt double Idexp double x int exp float Idexpf float x int exp include lt cmath gt double std ldexp double x int exp float std ldexpf float x int exp Idexp c and Idexpf c in rts src The Idexp and Idexpf functions multiply a floating point number x by 2 XP and return x x 2 XP The exp can be a negative or a positive value A range error occurs if the result is too large double result result result ldexp 1 5 5 result is 48 0 ldexp 6 0 3 result is 0 75 See div Idiv on page 9 54 Local Time include lt time h gt struct tm localtime const time_t timer include lt ctime gt struct tm std localtime const time_t timer localtime c in rts src The localtime function converts a calendar time pointed to by timer into a broken down time which is expressed as local time The function returns a pointer to the converted time For more information about the functions and types that the time h header declares and defines see section 9 3 15 Time Functions time h on page 9 22 Run Time Support Functions 9 69 log logf log logf Syntax for C Syntax for C Defined in Description Example log10 log10f Syntax for C Syntax for C Defined in Description Example 9 70 Natural Logarithm include lt math h gt double log double x float logf float x include lt cmath gt doubl
69. Note Do Not Use Scheduled Assembly Code as Source The assembly optimizer assumes that the instructions in the input file are placed in the logical order in which you would like them to occur that is linear assembly code Parallel instructions are illegal On the other hand the as sembler assumes that you have placed instructions in a location that ac counts for any delay slots due to pipeline latency Therefore it is not valid to use code written for the assembler that is scheduled assembly code or as sembly optimizer output as input for the assembly optimizer Using the Assembly Optimizer 4 5 What You Need to Know to Write Linear Assembly 4 3 1 4 6 J Linear assembly source statement syntax The linear assembly source programs consist of source statements that can contain assembly optimizer directives assembly language instruc tions and comments See section 4 3 1 for more information on the elements of a source statement J Specifying the functional unit The functional unit specifier is optional in both regular assembly code and linear assembly code Specifying the functional unit enables you to control which side of the register file is used for an instruction which helps the assembly optimizer perform functional unit and register allocation See section 4 3 2 for information on specifying the functional unit J Source comments The assembly optimizer attaches the comments on instructions from the input linea
70. Optimizer The mt option allows the assembly optimizer to assume there are no memory aliases in your linear assembly i e no memory references ever depend on each other However the assembly optimizer still recognizes any memory de pendences you point out with the mdep directive For more information about the mdep directive see page 4 22 and 4 45 Optimizing Your Code 3 27 Prevent Reordering of Associative Floating Point Operations 3 8 Prevent Reordering of Associative Floating Point Operations The compiler freely reorders associative floating point operations If you do not wish to have the compiler reorder associative floating point operations use the mc option Specifying the mc option may decrease performance 3 9 Use Caution With asm Statements in Optimized Code 3 28 You must be extremely careful when using asm inline assembly statements in optimized code The optimizer rearranges code segments uses registers freely and can completely remove variables or expressions Although the compiler never optimizes out an asm statement except when it is unreachable the surrounding environment where the assembly code is inserted can differ significantly from the original C C source code It is usually safe to use asm statements to manipulate hardware controls such as interrupt masks but asm statements that attempt to interface with the C C environment or access C C variables can have unexpected results After c
71. Page 2 1 About the Shell Programm meee 2 occ e ce cee e ese s eres 2 2 2 2 Invoking the C C Compiler Shell 00eeeeeeeeeeeee 2 4 2 3 Changing the Compiler s Behavior With Options 2 6 2 4 Setting Default Shell Options C_OPTION and C6X_C_OPTION 0200ceeeeeeeeeee 2 23 2 5 Controlling the Preprocessor ceeeeeeee teen eee 2 24 2 6 Understanding Diagnostic Messages 2 e0eeeeeeee 2 29 227 OthenMessagesic re wrt aea e stare E a erate e cea yere 2 33 2 8 Generating Cross Reference Listing Information SPXLOPlOM ere tacey eye A re teestegn ey A E ey creche tceaters 2 33 2 9 Generating a Raw Listing File pl Option 2 34 2 10 Using Inline Function Expansion cece eee eee eee 2 36 2 11 Interrupt Flexibility Options min Option 5 2 41 2 12 Linking C6400 Code With C6200 C6700 Older C6400 Object Code cient a cat etary arses ene tate tere oie itera e e sea cater tee aa 2 42 2 13 Using the Interlist Utility 2 1 0 0 cee cece eee ete eee 2 43 2 1 About the Shell Program 2 1 2 2 About the Shell Program The compiler shell program cl6x lets you compile assemble and optionally link in one step The shell runs one or more source modules through the following E The compiler which includes the parser optimizer and code generator accepts C or C source code and produces C6000 assembly language
72. TMS320C6000 Assembly Language Tools User s Guide Topic Page 10 1 Standard Run Time Support Libraries 0c eee eee 10 2 10 2 Invoking the Library Build Utility 2c cece eee 10 3 10 3 Library Build Utility Options 0 cece eee 10 4 104A Options Summary a e ee ee e e e e a a 10 5 10 1 10 1 Standard Run Time Support Libraries Command m m m m k6x 0o m12 k6x 0o m12 k6x 0o m12 k6x 0o m12 rts6400e lib m m k6x 0o m12 k6x 0o m12 rts6700e lib 10 2 rtti rtti rtti rtti rtti rtti The run time support libraries that are shipped with the C6000 code genera tion tools are built as follows Comment rts sre l rts6200 lib base C6200 me rts sre l rts6200e lib base C6200 big endian mv6400 rts srce l rts6400 lib base C6400 mv6400 me rts sre l base C6400 big endian mv6700 rts srce l rts6700 lib base C6700 mv6700 me rts sre l base C6700 big endian The base option set for every library is Lj Optimization level 2 02 option 1 Global structures and arrays accessed as far data function calls are far calls ml2 option _j Run time type information rtti option Invoking the Library Build Utility 10 2 Invoking the Library Build Utility The syntax for invoking the library build utility is mk6x options src_arch1 lobj lib1 src_arch2 lobj lib2
73. The origin must be a value returned by one of the following macros SEEK_SET 0x0000 Beginning of file SEEK_CUR 0x0001 Current value of the file position indicator SEEK_END 0x0002 End of file Run Time Support Functions 9 7 open Return Value Syntax for C Syntax for C Description Return Value 9 8 The return function is one of the following new value of the file position indicator if successful EOF _ if not successful Open File or Device For I O include lt stdio h gt include lt file h gt int open char path unsigned flags int mode include lt cstdio gt include lt file h gt int std open char path unsigned flags int mode The open function opens the device or file specified by path and prepares it for I O Li The path is the filename of the file to be opened including path informa tion Lj The flags are attributes that specify how the device or file is manipulated The flags are specified using the following symbols O_RDONLY 0x0000 open for reading O_WRONLY 0x0001 open for writing O_RDWR 0x0002 open for read amp write O_APPEND 0x0008 append on each write O_CREAT 0x0100 open with file create O_TRUNC 0x0200 open with truncation O_BINARY 0x8000 open in binary mode These parameters can be ignored in some cases depending on how data is interpreted by the device Note however that t
74. a TMS320C6000 device You can use one of several debug ging tools to refine and correct your code Available products include E Aninstruction accurate and clock accurate software simulator m AnXDS emulator For information about these debugging tools see the TMS320C6000 Code Composer Studio Tutorial and the Code Composer Studio User s Guide C C Compiler Overview 1 2 C C Compiler Overview The C6000 C C compiler is a full featured optimizing compiler that translates standard ANSI C programs into C6000 assembly language source The following subsections describe the key features of the compiler 1 2 1 C C Language Features I ANSI standard C The C6000 C C compiler fully conforms to the ANSI C standard as de fined by the ANSI specification and described in the second edition of Ker nighan and Ritchie s The C Programming Language K amp R The ANSI C standard includes extensions to C that provide maximum portability and increased capability Jg C The C6000 C C compiler supports C as defined by the ISO IEC 14882 1998 standard with certain exceptions For more information see section 7 2 Characteristics of TMS320C6000 C on page 7 5 1 ANSI standard run time support The compiler tools come with a complete run time library All library functions conform to the ANSI C C library standard The library includes functions for standard input and output string manipulation dynamic memory allocation data c
75. aR Ee fe ne E E E SES enum 31 0 MS LS Unsigned 32 bit Fy yy uuuUuUUUUUUUUUUUUUUUUUUUUUUUUU integer 31 0 Legend S sign E exponent MS most significant M mantissa l signed integer LS least significant U unsigned integer 8 10 Object Representation 8 2 1 3 long Data Types signed and unsigned Long and unsigned long data types are stored in an odd even pair of registers see Figure 8 3 and are always referenced as a pair in the format of odd register even register for example A1 A0 In little endian mode the lower address is loaded into the even register and the higher address is loaded into the odd register if data is loaded from location 0 then the byte at 0 is the lowest byte of the even register In big endian mode the higher address is loaded into the even register and the lower address is loaded into the odd register if data is loaded from location 0 then the byte at 0 is the highest byte of the odd register but is ignored Figure 8 3 40 Bit Data Storage Format a Signed 40 bit long MS Odd register X X XX XX XXXXXXXXXXXXXXXXXXSlE Et ttt 31 87 6 0 LS Even register i 31 0 b Unsigned 40 bit long MS Odd register X XXXXXXXXXXXXXXXXXXXXXXXUUUUUUUU 31 8 7 0 LS Even register UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU 31 0 Legend S sign I signed integer MS most significant U unsigned integer X unused LS least significant Run Time Environment 8 1 Object Representation
76. acosh acoshf Syntax for C Syntax for C Defined in Description 9 38 Arc Cosine include lt math h gt double acos double x float acosf float x include lt cmath gt double std acos double x float std acosf float x acos c and acostf c in rts src The acos and acosf functions return the arc cosine of a floating point argument x which must be in the range 1 1 The return value is an angle in the range 0 70 radians double 3Pi_Over_2 3Pi_ Over _2 acos Pi 1 0 acos 0 0 Pi 2 acos 1 0 0 0 Hyperbolic Arc Cosine define TIENHANCED_MATH_H 1 include lt math h gt double acosh double x float acoshf float x define TIENHANCED_MATH_H 1 include lt cmath gt double std acosh double x float std acoshf float x acosh c and acoshf c in rts src The acosh and acoshf functions return the hyperbolic arc cosine of a floating point argument x which must be in the range 1 infinity The return value is 0 0 acot acotf Syntax for C Syntax for C Defined in Description Example acot2 acot2f Syntax for C Syntax for C Defined in Description acot2 acot2f Polar Arc Cotangent define _TI ENHANCED_MATH_H 1 include lt math h gt double acot double x float acotf float x define _TI ENHANCED_MATH_H 1 include lt cmath gt double std acot double x float std acotf float x acot c and acotf c in
77. an optional parameter and defaults to 0 The mptr directive tells the assembly optimizer that when the register or sym bolname is used as a memory pointer in an LD B BU H HU W or ST B H W instruction it is initialized to point to base offset and is incremented by stride each time through the loop The mptr directive is valid within procedures only that is within occurrences of the proc and endproc directive pair or the cproc and endproc directive pair The symbols used for base symbol names are ina name space separate from all other labels This means that a symbolic register or assembly label can have the same name as a memory bank base name For example mptr Darray Darray Using the Assembly Optimizer 4 23 mptr Avoid Memory Bank Conflicts Example 4 24 _blkcp cproc i reg ptrl ptr2 tmpl MVK 0x0 ptrl MVK 0x8 ptr2 loop trip 50 mptr ptri at0O 4 mptr foo at 8 4 LDW potrl tmpl STW tmpl ptr2 foo i ADD Derby i B loop endproc Here is an example in which mptr is used to avoid memory bank conflicts ptrl address 0 ptr2 address 8 potential conflict load 0 bank 0 store 8 bank 0 L if 0 goto loop Syntax Description Example No Memory Aliases in the Function no_mdep no_mdep The no_mdep directive tells the assembly optimizer that no memory depen dences occur within that function with the exception of any dependences pointed to wi
78. and defines see section 9 3 15 Time Functions time h on page 9 22 Time Difference include lt time h gt double difftime time_t time1 time_t time0 include lt ctime gt double std difftime time_t time1 time_t time0 difftime c in rts src The difftime function calculates the difference between two calendar times time1 minus timeO The return value expresses seconds For more information about the functions and types that the time h header declares and defines see section 9 3 15 Time Functions time h on page 9 22 Run Time Support Functions 9 53 div Idiv div Idiv Syntax for C Syntax for C Defined in Description 9 54 Division include lt stdlib h gt div_t div register int numer register int denom Idiv_t Idiv register long numer register long denom include lt cstdlib gt div_t std div register int numer register int denom Idiv_t std Idiv register long numer register long denom div c in rts src Two functions support integer division by returning numer numerator divided by denom denominator You can use these functions to determine both the quotient and the remainder in a single operation J The div function performs integer division The input arguments are inte gers the function returns the quotient and the remainder in a structure of type div_t The structure is defined as follows typedef struct int quot quotient Bye int rem remainder a
79. approximate 32 bit C6700 float square root reciprocal int_sadd int src7 int src2 SADD Adds srci to src2 and saturates the long _Isadd int src1 long src2 result Returns the result int _sadd2 int src7 int src2 SADD2 Performs saturated addition between C6400 int_saddus2 unsigned src7 int src2 SADDUS2 pairs Ol le bitvallies It a ang sica Values for src1 can be signed or un signed uint _saddu4 uint src1 uint src2 SADDU4 Performs saturated addition between C6400 pairs of 8 bit unsigned values in src and src2 int _sat long src2 SAT Converts a 40 bit long to a 32 bit signed int and saturates if necessary uint _set uint src2 uint csta uint cstb SET Sets the specified field in src2 to all 1s and returns the src2 value The begin ning and ending bits of the field to be set are specified by csta and cstb respectively unit _setr unit src2 int src1 SET Sets the specified field in src2 to all 1s and returns the src2 value The begin ning and ending bits of the field to be set are specified by the lower ten bits of src1 uint _shfl uint src2 SHFL The lower 16 bits of src2 are placedin C6400 t Instructions not specified with a device apply to all C6000 devices See the Tms320C6000 Programmer s Guide for more information the even bit positions and the upper 16 bits of src are placed in the odd bit positions See section 8 5 3 Using Unaligned Data and 64 Bit Values for details on manipulating 8 byte data quantities
80. avoid operations that produce values that are already computed The optimizer per forms these data flow optimizations both locally within basic blocks and glob ally across entire functions I Copy propagation Following an assignment to a variable the compiler replaces references to the variable with its value The value can be another variable a constant oracommon subexpression This can result in increased opportunities for constant folding common subexpression elimination or even total elimi nation of the variable see Example 3 5 on page 3 39 and Example 3 6 on page 3 42 J Common subexpression elimination When two or more expressions produce the same value the compiler computes the value once saves it and reuses it I Redundant assignment elimination Often copy propagation and common subexpression elimination op timizations result in unnecessary assignments to variables variables with no subsequent reference before another assignment or before the end of the function The optimizer removes these dead assignments see Example 3 6 3 13 5 Expression Simplification For optimal evaluation the compiler simplifies expressions into equivalent forms requiring fewer instructions or registers Operations between constants are folded into single constants For example a b 4 c 1 becomes a b c 3 see Example 3 6 In Example 3 6 the constant 3 assigned to a is copy propagated to all uses of a
81. cee e cette eens 6 9 7 TMS320C6000 C C Language Implementation 0 cee cece 7 1 Discusses the specific characteristics of the TMS320C6000 C C compiler as they relate to the ANSI C specification 7 1 7 2 7 3 7 4 Characteristics of TMS320C6000 C keene 7 2 7 1 1 Identifiers and Constants 0 cc cece nents 7 2 fA Data Types Aste huh Ake Siate abe Salen siete abate bake aieds 7 3 LA 3 CCONVEFSIONS Sep oho sea cash iana T ache eas a ee ee eee ee 7 3 TAA EXPIOSSIONS 08h oiSelous ni chant ornare ae epee di dieses teed eters 7 3 LAO Declaratlons secs tees E eee ach AEO OEE EEI IE EIRAS 7 4 TAG PYEPrOCeSSOM etcen a ie erie Whew e dene sito Oe hee 7 4 Characteristics of TMS320C6000 C 0 teens 7 5 Data TYPOS arun rs wheres Nek a Martie ates Gates 6 Ses eet Ges So ei iat es aimee ies 7 6 KeyWords so iee E EE EEEE ES olga ae Oe Roars cadet earere daa 7 7 7 4 1 The const Keyword a N a A E A A eee eee 7 7 7 4 2 The cregister Keyword 0 cece teens 7 8 7 4 3 The interrupt Keyword 0 c cece eee eee ee 7 10 7 4 4 The near and far Keywords 00 c cee eee eens 7 11 7 4 5 The restrict Keyword cece cece teens 7 14 7 4 6 The volatile Keyword 0 cece cee eee eens 7 15 Contents L Register Variables 0 cece ee ene eee eens 7 16 7 6 Theasm Statement cresi recou eiui ae a ete eee 7 17 7 7 Pragma Directives
82. code or linear assembly code The software pipelining information appears as a comment in the asm file before a loop and for the assembly optimizer the information is displayed as the tool is running Example 3 1 illustrates the information that is generated for each loop Te Note More Details on Software Pipelining Information Refer to Chapter 2 or Appendix A of the TMS320C6000 Programmer s Guide for details on all the information and messages that can appear in the Soft ware Pipelining Information comment block before each loop eee ee ee eee Optimizing Your Code 3 5 Optimizing Software Pipelining Example 3 1 Software Pipelining Information r E a F F F FF F F F FF F F FF E O F FX FF F FF FF FF F F FX SOFTWARE PIPELINE INFORMATION Known Minimum Trip Count Known Maximum Trip Count Known Max Trip Count Factor Loop Carried Dependency Bound Unpartitioned Resource Bound Partitioned Resource Bound Resource Partition A sid B sid units 2 units 4 units 1 units 0 1 ap 0 OP BN NM YH cross paths address paths Long read paths Long write paths 0 Logical ops LS 0 1 L or S unit Addition ops LSD 6 3 2b or S or D unit Bound L S LS 3 4 Bound L S D LS LSD 5 4 Hx SOME SOOWDOOKRW Searching for software pipeline schedule at ii 5 Register is live too long ii 6 Did not find schedule aka 7 Schedule found with 3 i
83. collapsing epilogs 3 13 speculative execution 3 13 collapsing prologs 3 13 speculative execution 3 13 command file appending to commandline 2 15 defined A 2 linker 5 13 comments defined A 2 in linear assembly source code 4 14 linear assembly 4 6 Index 4 common logarithm functions 9 70 9 71 compare strings functions any number of characters in 9 96 entire string 9 90 compatibility with K amp R C 7 34 compiler described 2 1 to 2 44 diagnostic messages 2 29 to 2 32 optimizer 3 2 to 3 3 options conventions 2 6 summary 2 7 to 2 22 overview 1 5 to 1 8 sections 5 11 compiling after preprocessing 2 27 compiling C code compile only 2 17 overview commands and options 2 2 to 2 3 with the optimizer 3 2 to 3 3 concatenate strings functions any number of characters 9 95 entire string 9 89 const keyword 7 7 const section allocating in memory 5 11 described 8 3 constant accessing assembler constants from C 8 40 C language 7 2 character strings 8 15 defined A 3 escape sequences in character constants 7 35 string 7 35 control registers accessing from C C 7 8 control flow simplification 3 38 controlling diagnostic messages 2 31 to 2 32 conventions function calls 8 18 notational iv register 8 16 conversions 7 3 C language 7 3 described 9 14 convert case function 9 104 long integer to ASCII 9 71 string to number 9 47 time to string function 9 43 to ASCII function 9 104 copy file using
84. cstring gt char std strchr const char string int c strchr c in rts src The strchr function finds the first occurrence of c in string If strchr finds the character it returns a pointer to the character otherwise it returns a null pointer 0 char a When zz comes home the search is on for zs char b char the_z z b strchr a the_z After this example b points to the first z in zz String Compare include lt string h gt int stremp const char string1 register const char string2 int strcoll const char string1 const char string2 include lt cstring gt int std stremp const char string1 register const char string2 int std strcoll const char string1 const char string2 strcmp c and strcoll c in rts src The strcmp and strcoll functions compare string2 with string1 The functions are equivalent both functions are supported to provide compatibility with ANSI C The functions return one of the following values lt 0 if string1 is less than string2 0 if string1 is equal to string2 gt 0 if string1 is greater than string2 Example Syntax for C Syntax for C Defined in Description Example strcpy char stra why ask why char strb Just do it char strce why ask why if strcmp stra strb gt 0 statements her xecut Ay if strcoll stra strc 0 statements her xecute also St
85. decimal number 0 31 H The hour 24 hour clock as a decimal number 00 23 l The hour 12 hour clock as a decimal number 01 12 Aj The day of the year as a decimal number 001 366 mM The month as a decimal number 01 12 M The minute as a decimal number 00 59 p The locale s equivalency of either a m or p m S The seconds as a decimal number 00 59 U The week number of the year Sunday is the first day of the week as a decimal number 00 52 X The date representation AX The time representation Run Time Support Functions 9 93 strlen Syntax for C Syntax for C Defined in Description Example 9 94 Character Expands to Ay The year without century as a decimal number 00 99 SY The year with century as a decimal number L The time zone name or by no characters if no time zone exists For more information about the functions and types that the time h header declares and defines see section 9 3 15 Time Functions time h on page 9 22 Find String Length include lt string h gt size_t strlen const char string include lt cstring h gt size_t std strlen const char string strlen c in rts src The strlen function returns the length of string In C a character string is termi nated by the first byte with a value of 0 a null character The returned result does not include the terminating null character char stra who is there char strb abcdefghijklm
86. device You must declare these func tions with the interface specified in section 9 2 1 Overview of Low Level VO Implementation on page 9 5 The device drivers for the host that the TMS320C6000 debugger is run on are included in the C I O library The function returns one of the following values 0 if successful 1 if fails Run Time Support Functions 9 41 add_device Example This example does the following Lj Adds the device mydevice to the device table Li Opens a file named test on that device and associate it with the file fid J Writes the string Hello world into the file LJ Closes the file include lt stdio h gt KK KK A A A A A A A A A A A A A A A A A A A A A A A A A A A A HO Oe Declarations of the user defined device drivers KK HK KK A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A OO Oe extern int my_open char path unsigned flags int fno extern int my_close int fno extern int my_read int fno char buffer unsigned count extern int my_write int fno char buffer unsigned count extern int my_lseek int fno long offset int origin extern int my_unlink char path extern int my_rename char old_name char new_name main FILE fid add_device mydevice _MSA my_open my_close my_read my_write my_lseek my_unlink my_rename fid fopen mydevice test w fprintf fid Hello world n fclose fid 9 42
87. digits e E sign integer J The strtoul function converts a string to an unsigned long integer Specify the string in the following format space sign digits digits e E sign integer The space is indicated by a horizontal or vertical tab space bar carriage return form feed or new line Following the space is an optional sign and digits that represent the integer portion of the number The fractional part of the num ber follows then the exponent including an optional sign The first unrecognized character terminates the string The pointer that endptr points to is set to point to this character Syntax for C Syntax for C Defined in Description Example Syntax for C Syntax for C Defined in Description strxfrm Break String into Token include lt string h gt char std strtok char str1 const char str2 include lt cstring gt char std strtok char str1 const char str2 strtok c in rts src Successive calls to the strtok function break str1 into a series of tokens each delimited by a character from str2 Each call returns a pointer to the next token After the first invocation of strtok in the example below the pointer stra points to the string excuse 0 because strtok has inserted a null character where the first space used to be In the comments the notation 0 represents the null character n char stra chart pir xcuse me while I kiss the sky ptr s
88. for C Defined in Description Example 9 98 Find Any Matching Character include lt string h gt char std strpbrk const char string const char chs include lt cstring gt char std strpbrk const char string const char chs strpbrk c in rts src The strpbrk function locates the first occurrence in string of any character in chs If strpbrk finds a matching character it returns a pointer to that character otherwise it returns a null pointer 0 char stra it was not me char strb wave char a a strpbrk stra strb After this example a points to the w in was Find Last Occurrence of a Character include lt string h gt char strrchr const char string int c include lt cstring gt char std strrchr const char string int c strrchr c in rts src The strrchr function finds the last occurrence of c in string If strrchr finds the character it returns a pointer to the character otherwise it returns a null pointer 0 char a When zz comes home the search is on for zs char b char the_z 2z After this example b points to the z in zs near the end of the string Syntax for C Syntax for C Defined in Description Example Syntax for C Syntax for C Defined in Description Example strstr Find Number of Matching Characters include lt string h gt size_t strspn register const char string const char
89. function 9 38 acosf function 9 38 acosh function 9 38 acoshf function 9 38 acot function 9 39 acot2 function 9 39 acot2f function 9 39 acotf function 9 39 acoth function 9 40 acothf function 9 40 ad shell option 2 22 add_device function 9 40 ahc shell option 2 22 ahi shell option 2 22 Index al shell option 2 22 alias disambiguation defined A 1 described 3 38 aliasing defined A 1 aliasing techniques 3 25 to 3 27 assigning the address to a global variable 3 25 indicating certain techniques are not used 3 26 to 3 27 returning the address from a function 3 25 align help function 9 72 allocate memory allocate and clear memory function 9 49 allocate memory function 9 72 sections 5 11 allocation defined A 1 alt h pathname 2 26 ANSI C compatibility with K amp R C 7 34 TMS320C6000 C differences from 7 2 defined A 1 standard overview 1 5 ar linker option 5 6 arc cosine functions 9 38 cotangent cartesian functions 9 39 hyperbolic functions 9 40 polar functions 9 39 sine functions 9 43 tangent cartesian functions 9 45 hyperbolic functions 9 46 polar functions 9 45 archive library defined A 1 linking 5 8 Index 1 Index archiver defined A 1 described 1 3 arguments accessing 8 21 arithmetic operations 8 43 array search function 9 48 sort function 9 80 as shell option 2 22 ASCII string conversion functions 9 47 asctime function 9 43 asin function 9 43 asinf function 9 43 asinh function 9 44 as
90. generated The first loop is not pipelined and it executes if the run time trip count is less than the loop s minimum trip count The second loop is the software pipelined loop and it executes when the run time trip count is greater than or equal to the minimum trip count At any given time one of the loops is a redundant loop foo N N is the trip count for i 0 i lt N i i is the trip counter After finding a software pipeline for the loop the compiler transforms foo as below assuming the minimum trip count for the loop is 3 Two versions of the loop would be generated and the following comparison would be used to deter mine which version should be executed foo N if N lt 3 for i 0 i lt N i Unpipelined version else for i 0 i lt N i Pipelined version foo 50 Execute software pipelined loop mi foo 2 Execute loop unpipelined Reducing Code Size ms Option You may be able to help the compiler avoid producing redundant loops with the use of pm o3 see section 3 6 on page 3 20 or the use of the MUST_ITERATE pragma see section 7 7 14 on page 7 28 gt Ee SSE EE aqa gt jw_0aq_q q 0 Oe Note Turning Off Redundant Loops Specifying any ms option turns off redundant loops 3 4 Reducing Code Size ms Option When using the o or on option you are telling the compiler to optimize your code The higher th
91. generates a preprocessed version of your source file with a pp extension Use the ppc option instead of the ppo option if you want to keep the comments Generating a Preprocessed Listing File With Line Control Information ppl Option By default the preprocessed output file contains no preprocessor directives If you want to include the line directives use the ppl option The ppl option performs preprocessing only and writes preprocessed output with line control information line directives to a file with the same name as the source file but with a pp extension Generating Preprocessed Output for a Make Utility ppd Option The ppd option performs preprocessing only but instead of writing prepro cessed output writes a list of dependency lines suitable for input to a standard make utility The list is written to a file with the same name as the source file but with a pp extension Generating a List of Files Included With the include Directive ppi Option The ppi option performs preprocessing only but instead of writing prepro cessed output writes a list of files included with the include directive The list is written to a file with the same name as the source file but with a pp extension Understanding Diagnostic Messages 2 6 Understanding Diagnostic Messages One of the compiler s primary functions is to report diagnostics for the source program When the compiler detects a suspect condition it d
92. h gt double std round double x float std roundf float x define TlENHANCED_MATH_H 1 include lt cmath gt double round double x float roundf float x round c and roundf c in rts src The round and roundf functions return a floating point number equal to x rounded to the nearest integer When x is an equal distance from two integers the even value is returned Trat Xp Ve Ur Vy Ea Sr Or BF xX 2 65 y roundf x y 3 w 5 28 v roundf u v 5 r 3 5 s roundf s s 4 o 6 5 p roundf o p 6 0 Run Time Support Functions 9 83 rsqrt rsqrtf rsqrt rsqrtf Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C Defined in Description 9 84 Reciprocal Square Root define TIENHANCED_MATH_H 1 include lt math h gt double rsqrt double x float rsqrtf float x define TIENHANCED_MATH_H 1 include lt cmath gt double std rsqrt double x float std rsqrtf float x rsqrt c and rsqrtf c in rts src The rsqrt and rsartf functions return the reciprocal square root of areal number x The rsqrt x function is equivalent mathematically to 1 0 sqrt x but is much faster and has similar accuracy A domain error occurs if the argument is negative Read Stream From Standard Input include lt stdlib h gt int scanf const char _fmt in
93. indicates errors in library functions Errors can occur in a math function if invalid parameter values are passed to the function or if the function returns a result that is outside the defined range for the type of the result When this happens a variable named errno is set to the value of one of the following macros i EDOM for domain errors invalid parameter Gg ERANGE for range errors invalid result J ENOENT for path errors path does not exist J EFPOS for seek errors file position error C code that calls a math function can read the value of errno to check for error conditions The errno variable is declared in errno h cerrno and defined in errno c 9 3 4 Low Level Input Output Functions file h The file h header declares the low level I O functions used to implement input and output operations How to implement I O for the C6000 is described in section 9 2 The C IO Functions on page 9 4 9 3 5 Fast Macros Static Inline Functions gsm h The gsm h header file contains fast macros and static inline function definitions to define the basic operations of a GSM vocoder Run Time Support Functions 9 15 Header Files 9 3 6 Limits float h cfloat and limits h climits The float h cfloat and limits h climits headers define macros that expand to useful limits and parameters of the TMS320C6000 s numeric representations Table 9 1 and Table 9 2 list these macros and their limits Table 9 1 Macros That Supply Integ
94. inline the function call the loop could not be software pipelined Too many instructions There are too many instructions in the loop to software pipeline Software pipelining disabled Software pipelining has been disabled by a command line option Pipelining is turned off when using the mu option not using the o2 or 03 option or using the ms2 or ms3 option Uninitialized trip counter The trip counter may not have been set to an initial value Suppressed to prevent code expansion Software pipelining may be suppressed because of the ms1 option When the ms1 option is used software pipelining is disabled in less promising cases to reduce code size To enable pipelining use ms0 or omit the ms option altogether Loop carried dependency bound too large If the loop has complex loop control try mh according to the recommendations in section 3 2 3 2 Selecting the Best Threshold Value on page 3 14 Cannot identify trip counter The loop trip counter could not be identified or was used incorrectly in the loop body Optimizing Your Code 3 9 Optimizing Software Pipelining 3 2 2 2 Pipeline Failure Messages The following messages can appear when the compiler or assembly optimizer is processing a software pipeline and it fails J Address incrementis too large An address register s offset must be ad justed because the offset is out of range of the C6000 s offset addressing mode You must minimize addre
95. into the return value int _spint float SPINT Converts 32 bit float to 32 bit signed C6700 integer using the rounding mode set by the CSR register int _sshl int src2 uint src7 SSHL Shifts src2 left by the contents of src1 saturates the result to 32 bits and re turns the result int _sshvl int src2 int src1 SSHVL Shifts src2 to the left right src1 bits C6400 Saturates the result if the shifted Int SSenve int sre2 int shed Sette value is greater than MAX_INT orless than MIN_INT int __ssub int src7 int src2 SSUB Subtracts src2 from src1 saturates long _Issub int src7 long src2 the result and returns the result T Instructions not specified with a device apply to all C6000 devices See the Tms320C6000 Programmer s Guide for more information See section 8 5 3 Using Unaligned Data and 64 Bit Values for details on manipulating 8 byte data quantities Run Time Environment 8 33 Interfacing C and C With Assembly Language Table 8 3 TMS320C6000 C C Compiler Intrinsics Continued C C Compiler Intrinsic uint _subc uint src7 uint src2 Assembly Instruction SUBC Description Conditional subtract divide step Devicet int _sub2 int src7 int src2 SUB2 Subtracts the upper and lower halves of src2 from the upper and lower halves of src1 and returns the result Borrowing in the lower half subtract does not affect the upper half subtract int _sub4 int src7 int src2
96. into the AO register then loads the BO register using a pointer to AO MVKL _x AO MVKH _x AO LDW A0 BO To use the large memory model invoke the compiler with the mln option For more information on the mln option see section 7 4 4 4 Large Model Option ml on page 7 13 For more information on the storage allocation of global and static variables see section 7 4 4 The near and far Keywords on page 7 11 Memory Model 8 1 6 Position Independent Data Near global and static data are stored in the bss section All near data for a program must fit within 32K bytes of memory This limit comes from the ad dressing mode used to access near data which is limited to a 15 bit unsigned offset from DP B14 the data page pointer For some applications it may be desirable to have multiple data pages with separate instances of near data For example a multi channel application may have multiple copies of the same program running with different data pages The functionality is supported by the C6000 compiler s memory model and is referred to as position independent data Position independent data means that all near data accesses are relative to the data page DP pointer allowing for the DP to be changed at run time There are three areas where position independent data is implemented by the compiler 1 Near direct memory access STW B4 DP _a global _a spss _a 4 4 All near direct accesses are relative to the DP
97. list for the variable argument function The parmN parameter points to the right most parameter in the fixed declared list J The va_arg macro returns the value of the next argument in a call to a variable argument function Each time you call va_arg it modifies _ap so that successive arguments for the variable argument function can be returned by successive calls to va_arg va_arg modifies _ap to point to the next argument in the list The type parameter is a type name it is the type of the current argument in the list J The va_end macro resets the stack environment after va_start and va_arg are used Note that you must call va_start to initialize _ap before calling va_arg or va_end Example vfprintf Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C Defined in Description vprintf int Printi chah fmt 2 va_list ap va_start ap fmt i va_arg ap int Get next arg an integer s va_arg ap char Get next arg a string l va_arg ap long Get next arg a long va_end ap Reset Write to Stream include lt stdlib h gt int vfprintf FILE _ fp const char _ format va_list _ap include lt cstdlib gt int std vfprintf FILE _fp const char _ format va_list _ ap vfprintf c in rts src The vfprintf function writes to the stream pointed to by _ fp The string pointed to by _ format describes how to write the stream The arg
98. macros and declares functions The types are m m m size_t an unsigned integer type that is the data type of the sizeofoperator Originally defined in sttdef h cstddef fpos_t an unsigned integer type that can uniquely specify every position within a file FILE a structure type to record all the information necessary to control a stream The macros are m E NULL a macro that expands to a null pointer constant 0 Originally defined in sttdef h cstddef It is not redefined if it was already defined BUFSIZ a macro that expands to the size of the buffer that setbuf uses EOF the end of file marker FOPEN_MAX a macro that expands to the largest number of files that can be open at one time FILENAME_MAX a macro that expands to the length of the longest file name in characters L_tmpnam a macro that expands to the longest filename string that tmpnam can generate Header Files SEEK_CUR SEEK_SET and SEEK_END macros that expand to indi cate the position current start of file or end of file respectively in a file TMP_MAX a macro that expands to the maximum number of unique file names that tmpnam can generate stderr stdin stdout pointers to the standard error input and output files respectively The input output functions are listed in Table 9 3 f on page 9 30 9 3 13 General Utilities stdlib h cstdlib The stdlib h cstdlib header defines a macro and types and declares f
99. mo option is advantageous for use with libraries where normally only a limited number of the functions in a file are used in any one executable The alternative to the mo option is to place each function in its own file Linking C C Code 5 15 Chapter 6 Using the Stand Alone Simulator The TMS320C6000 stand alone simulator loads and runs an executable COFF out file When used with the C I O libraries the stand alone simulator supports all C I O functions with standard output to the screen The stand alone simulator gives you a way to gather statistics about your program using the clock function Additional benefits are that the stand alone simulator can be used in a batch file and is included in the code generation tools This chapter describes how to invoke the stand alone simulator It also provides an example of C code and the stand alone simulator results Topic Page 6 1 Invoking the Stand Alone Simulator 000eeeeeeee eee 6 2 6 2 Stand Alone Simulator Options ccee cece eee eee eee 6 4 6 3 Using the Profiling Capability of the Stand Alone Simulator 6 6 6 4 Selecting Silicon Revision to Simulate rev Option 6 8 6 5 Stand Alone Simulator Example 0 cceeeeee seen ee eee 6 9 6 1 Invoking the Stand Alone Simulator 6 1 6 2 Invoking the Stand Alone Simulator This section shows how to invoke the stand alone simulator to load and run an executable COF
100. nonexecutable output Strips symbol table information and line number en tries from the output module Sets stack size bytes Creates unresolved external symbol Displays a message when an undefined output sec tion is created Forces rereading of libraries Page 2 3 1 Frequently Used Options Changing the Compiler s Behavior With Options Following are detailed descriptions of options that you will probably use fre quently filename C dname def 9 Appends the contents of a file to the command line You can use this option to avoid limitations on command line length or C style comments imposed by the host operating system Use a or at the beginning of a line in the command file to include comments You can also include comments by de limiting them with and You can use the option multiple times to specify multiple files For instance the following indicates that file3 should be compiled as source and file1 and file2 are files cl6x filel file2 file3 Suppresses the linker and overrides the z option which specifies linking Use this option when you have z specified in the C_OPTION or C6X_C_OPTION environment variable and you do not want to link For more information see sec tion 5 3 Disabling the Linker c Shell Option on page 5 5 Predefines the constant name for the preprocessor This is equivalent to inserting define name def at the top of each C source
101. not to occur For more information about using the mt option see section 3 7 2 page 3 26 4 6 3 Using the no_mdep Directive 4 44 You can specify the no_mdep directive anywhere in a c proc function When ever it is used you guarantee that no memory dependences occur within that function kx f gt gt ooo 11 Note Memory Dependency Exception For both of these methods mt and no_mdep the assembly optimizer rec ognizes any memory dependences the user points out with the mdep direc tive G Memory Alias Disambiguation 4 6 4 Using the mdep Directive to Identify Specific Memory Dependences You can use the mdep directive to identify specific memory dependences by annotating each memory reference with a name and using those names with the mdep directive to indicate the actual dependence Annotating a memory reference requires adding information right next to the memory reference in the assembly stream Include the following Immediately after a memory refer ence symbol The symbol has the same syntax restrictions as any assembly symbol For more information about symbols see the 7MS320C6000 Assembly Language Tools User s Guide It is in the same name space as the symbolic registers You cannot use the same name for a symbolic register and annotating a memory reference Example 4 15 Annotating a Memory Reference LDW xpl ldl inpl j name memory reference l1d1
102. on x 3 22 0 0 0 0 J 2 tls Ox 28 UNIE SD oS i oe S or a Dunit 2 LS LSD 2 2 ftware pipeline schedule at found with 4 iterations in parallel Epilog not entir Collapsed epilog ly removed stages 2 Prolog not entir Collapsed prolog Minimum required For further impr Minimum safe tri ly removed stages 2 memory pad 0 bytes ovement on this loop try option mh16 p count 1 4 12 There are only two cross paths in the C6000 This limits the C6000 to one source read from each data path s opposite register file per cycle The com piler must select a side for each instruction this is called partitioning In Example 4 3 the compiler partitioned two ADD instructions to sides requiring cross paths before the multiply instructions that needed the cross paths were partitioned What You Need to Know to Write Linear Assembly You can partition enough instructions by hand to force optimal partitioning by using functional unit specifiers If you use functional unit specifiers to force the MPYs to the sides you want them to be on the compiler has more information about where the subsequent ADDs should go rather more information about where the symbolic registers involved must go Example 4 5 shows the as sembly code after functional unit specifiers are added Example 4 5 Code From Example 4 2 With Functional Unit Specifiers Added _dotp loop ent ent cp
103. or called but it is usually vectored to by reset hardware You must link the c_int00 func tion with the other object modules This occurs automatically when you use the c or cr linker option and include a standard run time support library as one of the linker input files When C C programs are linked the linker sets the entry point value in the executable output module to the symbol c_int00 This does not however set the hardware to automatically vector to c_intOO at reset see the TMS320C6000 CPU and Instruction Set Reference Guide The c_int00 function performs the following tasks to initialize the environment 1 Itdefines a section called stack for the system stack and sets up the initial stack pointers 2 It initializes global variables by copying the data from the initialization tables in the cinit section to the storage allocated for the variables in the bss section If you are initializing variables at load time cr option a loader performs this step before the program runs it is not performed by the boot routine For more information see section 8 8 1 Automatic Ini tialization of Variables 3 It calls the function main to run the C C program You can replace or modify the boot routine to meet your system requirements However the boot routine must perform the operations listed above to cor rectly initialize the C C environment See section 10 1 on page 10 2 for a list of the standard run time sup
104. order and may not be a constant memory reference or other expression You can use the cl6x mln option to indicate whether a call is near or far If the mln option is set to 0 or if no level is specified default the call is near If the mln option is set to 1 2 or 3 the call is far To force a far call you must expli citly load the address of the function in a register and then issue an indirect call For example MVK func reg MVKH func reg call reg opl forcing a far call Using the Assembly Optimizer 4 17 call Calls a Function If you want to use for indirection you must abide by C C syntax rules and use the following alternate syntax call ret_reg ireg arg1 arg2 For example call driver opl op2 indirect call reg driver call driver opl op2 also an indirect call Here are other valid examples that use the call syntax call fir x h y void function call minimal no arguments call sum vecsum a b returns an int call hi lo _atol string returns a long Since you can use machine register names anywhere you can use symbolic registers it may appear you can change the function calling convention For example call A6 compute It appears that the result is returned in A6 instead of A4 This is incorrect Using machine registers does not overide the calling convention After returning from the compute function with the returned result in A4 a MV instruc
105. represent it returns HUGE_VAL instead The math h cmath header includes enhanced math functions that are avail able when you define the _Tl ENHANCED _MATH_H symbol in your source file When you define the _TI_ ENHANCED_MATH_H symbol the HUGE_VALF symbol is made visible HUGE_VALF is the float counterpart to HUGE_VAL For all math h cmath functions domain and range errors are handled by setting errno to EDOM or ERANGE as appropriate The function input outputs are rounded to the nearest legal value Header Files 9 3 9 Nonlocal Jumps setjmp h csetjmp The setjmp h csetjmp header defines a type and a macro and declares a func tion for bypassing the normal function call and return discipline These include J jmp_buf an array type suitable for holding the information needed to re store a calling environment _j setjimp a macro that saves its calling environment in its jmp_buf argument for later use by the longjmp function Lj ongjmp a function that uses its jmp_buf argument to restore the program environment The nonlocal jmp macro and function are listed in Table 9 3 d on page 9 30 9 3 10 Variable Arguments stdarg h cstdarg Some functions can have a variable number of arguments whose types can differ Such functions are called variable argument functions The stdarg h cstdarg header declares macros and a type that help you to use variable argument functions J The macros are va_start va_arg and va_end These m
106. rts src The acot and acotf functions return the arc cotangent of a floating point argu ment x The return value is an angle in the range 0 7 2 radians double realval radians realval 0 0 radians acotf realval return value Pi 2 Cartesian Arc Cotangent define TlENHANCED_MATH_H 1 include lt math h gt double acot2 double x double y float acot2f float x float y define TlENHANCED_MATH_H 1 include lt cmath gt double std acot2 double x double y float std acot2f float x float y acot2 c and acot2f c in rts src The acot2 and acot2f functions return the inverse cotangent of x y The func tion uses the signs of the arguments to determine the quadrant of the return value Both arguments cannot be 0 The return value is an angle in the range T 70 radians Run Time Support Functions 9 39 acoth acothf acoth acothf Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C 9 40 Hyperbolic Arc Cotangent define _TI_ ENHANCED_MATH_H 1 include lt math h gt double acoth double x float acothf float x define _TI_ ENHANCED_MATH_H 1 include lt cmath gt double std acoth double x float std acothf float x acoth c and acothf c in rts src The acothf function returns the hyperbolic arc cotangent of a floating point argument x The magnitude of x must be 0 Add Device to Device Table include lt stdio h gt int add_de
107. sequence of pseudorandom numbers The srand function does not return a value If you call rand before calling srand rand generates the same sequence it would produce if you first called srand with a seed value of 1 If you call srand with the same seed value rand generates the same sequence of numbers Change Heap Size include lt stdlib h gt void realloc void packet size_t size include lt cstdlib gt void std realloc void packet size_t size memory c in rts src The realloc function changes the size of the allocated memory pointed to by packet to the size specified in bytes by size The contents of the memory space up to the lesser of the old and new sizes is not changed _ If packet is 0 realloc behaves like malloc _j If packet points to unallocated space realloc takes no action and re turns 0 Lj If the space cannot be allocated the original memory space is not changed and realloc returns 0 Run Time Support Functions 9 81 remove Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C Defined in Description 9 82 J If size 0 and packet is not null realloc frees the space that packet points to If the entire object must be moved to allocate more space realloc returns a pointer to the new space Any memory freed by this operation is deallocated If an error occurs the function returns a null pointer 0 The memory that calloc uses is ina spec
108. size_t n register size_t n size_t n register size_t length register const char s2 int strcoll const char string1 char strcepy register char dest 9 34 const char string2 register const char src Description Page Returns a sequence of pseudorandom integers in 9 81 the range 0 to RAND_MAX Changes the size of an allocated memory space 9 81 Resets the random number generator 9 81 Converts a string to a floating point value 9 100 Converts a string to a long integer 9 100 Converts a string to an unsigned long integer 9 100 Description Page Finds the first occurrence of c in the first n charac 9 73 ters of cs expands inline except when pi is used Compares the first n characters of cs to ct ex 9 73 pands inline except when pi is used Copies n characters from s1 to s2 9 74 Moves n characters from s1 to s2 9 74 Copies the value of ch into the first length charac 9 74 ters of mem expands inline except when pi is used Appends string2 to the end of string1 9 89 Finds the first occurrence of character c in s 9 90 expands inline if x is used Compares strings and returns one of the following 9 90 values lt 0 if string1 is less than string2 0 if string1 is equal to string2 gt 0 if string1 is greater than string2 Expands inline if x is used Compares strings and returns one of the following 9 90 values lt 0 if string1 is less than string2 0 if string1 is e
109. source code You can compile C and C files in a single command The compiler uses the conventions for filename extensions to distinguish between different file types See section 2 3 2 Specifying Filenames for more information The assembler generates a COFF object file The linker links your files to create an executable object file The linker is optional with the shell You can compile and assemble various files with the shell and link them later See Chapter 5 Linking C C Code for information about linking the files in a separate step By default the shell compiles and assembles files however you can also link the files using the z shell option Figure 2 1 illustrates the path the shell takes with and without using the linker About the Shell Program Figure 2 1 The Shell Program Overview C C source files Pe ee C C compiler Parser l Optimizer l optional Assembly optimizer Dr ee a oe ee a ee 7 Assembly l Code Preprocessor i generator ee a i aaa iia ani iak aaay Jj Assembler e source With the linker option z Executable COFF file For a complete description of the assembler and the linker see the TMS320C6000 Assembly Language Tools User s Guide Using the C C Compiler 2 3 Invoking the C C Compiler Shell 2 2 2 4 Invoking the C C Compiler Shell To invoke the compiler shell enter cl6x options
110. specific clock function can be written You must also define the CLOCKS_PER_SEC macro according to the units of your clock so that the value returned by clock number of clock ticks can be divided by CLOCKS_PER_SEC to produce a value in seconds Run Time Support Functions 9 23 Header Files 9 3 16 Exception Handling exception and stdexcept Exception handling is not supported The exception and stdexcept include files which are for C only are empty 9 3 17 Dynamic Memory Management new The new header which is for C only defines functions for new new delete delete and their placement versions The type new_handler and the function set_new_handler are also provided to support error recovery during memory allocation 9 3 18 Run Time Type Information typeinfo The typeinfo header which is for C only defines the type_info structure which is used to represent C type information at run time 9 24 Summary of Run Time Support Functions and Macros 9 4 Summary of Run Time Support Functions and Macros Table 9 3 summarizes the run time support header files in alphabetical order provided with the TMS320C6000 ANSI C C compiler Most of the functions described are per the ANSI standard and behave exactly as described in the standard The functions and macros listed in Table 9 3 are described in detail in section 9 5 Description of Run time Support Functions and Macros on page 9 37 For a complete descr
111. src See section 8 5 3 Using Unaligned Data and 64 Bit Values for details on manipulating 8 byte data quantities 8 28 Interfacing C and C With Assembly Language Table 8 3 TMS320C6000 C C Compiler Intrinsics Continued Assembly C C Compiler Intrinsic Instruction Description Devicet uint _ ftoi float src Reinterprets the bits in the float as an unsigned For example _ftoi 1 0 1065353216U int_gmpy4 int src7 int src2 GMPY4 Performs the galois field multiply on C6400 four values in src1 with four parallel values in src2 The four products are packed into the return value uint _hi double src Returns the high odd register of a double register pair double _itod uint src2 uint src7 Builds a new double register pair by reinterpreting two unsigneds where src2 is the high odd register and src1 is the low even register float _itof uint src Reinterprets the bits in the unsigned as a float For example _itof 0x3f800000 1 0 uint _lo double src Returns the low even register of a double register pair uint _Imbd uint src7 uint src2 LMBD Searches for a leftmost 1 or 0 of src2 determined by the LSB of src1 Re turns the number of bits up to the bit change double _Itod long src Reinterperts long register pair src as a double register pair int _max2 int src7 int src2 MAX2 Places the larger smaller of each pair C6400 unsigned _maxu4 unsigned src7 MAX4 of values in the
112. symbols constants or expres sions and must be separated by commas comment Comments are optional Comments that begin in column 1 must begin with a semicolon or an asterisk comments that begin in any other column must begin with a semicolon The C6000 assembly optimizer reads up to 200 characters per line Any char acters beyond 200 are truncated Keep the operational part of your source statements that is everything other than comments less than 200 characters in length for correct assembly Your comments can extend beyond the charac ter limit but the truncated portion is not included in the asm file Follow these guidelines in writing linear assembly code m m LJ All statements must begin with a label a blank an asterisk or a semicolon Labels are optional if used they must begin in column 1 One or more blanks must separate each field Tab characters are inter preted as blanks You must separate the operand list from the preceding field with a blank Comments are optional Comments that begin in column 1 can begin with an asterisk or a semicolon or but comments that begin in any other column must begin with a semicolon If you set up a conditional instruction the register must be surrounded by square brackets A mnemonic cannot begin in column 1 or it is interpreted as a label See the TMS320C6000 Assembly Language Tools User s Guide for informa tion on the syntax of C6000 instruction
113. table are values and which are addresses If you try to access an assembler or linker constant by name the compiler attempts to fetch a value from the address represented in the symbol table To prevent this unwanted fetch you must use the amp address of operator to get the value In other words if x is an assembly language constant its value in C C is amp x You can use casts and defines to ease the use of these symbols in your pro gram as in Example 8 4 Example 8 4 Accessing an Assembly Language Constant From C 8 40 a C program extern int table_size external ref define TABLE SIZE int amp table_size use cast to hide address of for i 0 i lt TABLE_SIZE i use like normal symbol b Assembly language program _table_size set 10000 define the constant global _table_size make it global Because you are referencing only the symbol s value as stored in the symbol table the symbol s declared type is unimportant In Example 8 4 int is used You can reference linker defined symbols in a similar manner Interrupt Handling 8 6 Interrupt Handling As long as you follow the guidelines in this section you can interrupt and return to C C code without disrupting the C C environment When the C C environment is initialized the startup routine does not enable or disable inter rupts If your system uses interru
114. than the minimum safe trip count a redundant loop is required Otherwise pipelining must be supressed Both these values can be found in the comment block preceding a software pipelined loop Optimizing Your Code 3 13 Optimizing Software Pipelining x Known Minimum Trip Count 1 A Minimum safe trip count sni If the minimum safe trip count is greater than the minimum known trip count use of mh is highly recommended not only for code size but for performance as well When using mh you must ensure that potentially speculated loads will not cause illegal reads This can be done by padding the data sections and or stack as needed by the required memory pad in both directions The required memory pad for a given software pipelined loop is also provided in the com ment block for that loop px Minimum required memory pad 8 bytes 3 2 3 2 Selecting the Best Threshold Value When a loop is software pipelined the comment block preceding the loop pro vides the following information Lj Required memory pad for this loop Lj The minimum value of nneededto achieve this software pipeline schedule and level of collapsing L1 Suggestion for a larger value of nto use which might allow additional col lapsing This information shows up in the comment block as follows nd Minimum required memory pad 5 bytes pa Minimum threshold value mh7 ok Ud Pa For further improvement on this loop try option mh14 Fo
115. the command line and the input filenames it looks for the C6X_C_OPTION environment variable first and then reads and processes it If it does not find the C6X_C_OPTION it reads the C_OPTION environment variable and processes it The table below shows how to set C_OPTION the environment variable Select the command for your operating system Operating System Enter UNIX with C shell setenv C_OPTION option options J UNIX with Bourne or Korn C_OPTION option options J shell export C_OPTION Windows set C_OPTION option options Environment variable options are specified in the same way and have the same meaning as they do on the command line For example if you want to always run quietly the q option enable C C source interlisting the s option and link the z option for Windows set up the C_OPTION environ ment variable as follows set C_OPTION qs z In the following examples each time you run the compiler shell it runs the linker Any options following z on the command line or in C_OPTION are passed to the linker This enables you to use the C_OPTION environment vari able to specify default compiler and linker options and then specify additional compiler and linker options on the shell command line If you have set z in the environment variable and want to compile only use the c option of the shell These additional examples assume C_OPTION is set as shown above el6x c co
116. the target CPU version For more information about the mv option see page 3 15 Compiles or assembly optimizes only The specified source files are compiled or assembly optimized but not assembled or linked This option overrides z The output is assembly language output from the compiler Suppresses banners and progress information from all the tools Only source filenames and error messages are output Suppresses all output except error messages Invokes the interlist utility which interweaves optimizer comments or C C source with assembly source If the optimizer is invoked on option optimizer comments are interlisted with the assembly language output of the compiler If the optimizer is not invoked C C source state ments are interlisted with the assembly language output of the compiler which allows you to inspect the code generated for each C C statement The s option implies the k option The s option can have a negative performance and or code size impact Invokes the interlist utility which interweaves original C C source with compiler generated assembly language The interlisted C statements may appear to be out of sequence You can use the interlist utility with the optimizer by combin ing the os and ss options For more information see sec tion 2 13 Using the Interlist Utility on page 2 43 The ss option can have a negative performance and or code size impact Undefines the predefin
117. these options if you have too much static and extern data to fit within a 15 bit scaled offset from the beginning of the bss section or if you have calls in which the called function is more than 1 M word away from the call site The linker issues an error message when these situations occur If an object is declared far its address is loaded into a register and the compiler does an indirect load of that register For more information on the min option see page 2 16 For more information on the differences in the large and small memory models see section 8 1 5 on page 8 6 TMS320C6000 C C Language Implementation 7 13 Keywords 7 4 5 The restrict Keyword To help the compiler determine memory dependencies you can qualify a pointer reference or array with the restrict keyword The restrict keyword is a type qualifier that may be applied to pointers references and arrays Its use represents a guarantee by the programmer that within the scope of the pointer declaration the object pointed to can be accessed only by that pointer Any violation of this guarantee renders the program undefined This practice helps the compiler optimize certain sections of code because aliasing information can be more easily determined In Example 7 2 you can use the restrict keyword to tell the compiler that a and b never point to the same object in foo and the objects memory that foo accesses does not overlap Example 7 2 Use of the rest
118. time support function is declared in a header file Each header file declares the following Li A set of related functions or macros _j Any types that you need to use the functions 1 Any macros that you need to use the functions These are the header files that declare the ANSI C run time support functions assert h limits stddef h time h ctype h math h stdio h errno h setjmp h stdlib h file h stdarg h string h In addition to the ANSI C header files the following C header files are included cassert cmath cstddef exception cctype cmathf cstdio new cerrno cmathl cstdlib rtti h cfloat csetimp cstring stdexcept climits cstdarg ctime typeinfo To use a run time support function you must first use the include prepro cessor directive to include the header file that declares the function For example in C the isdigit function is declared by the ctype h header Before you can use the isdigit function you must first include ctype h include lt ctype h gt val isdigit num You can include headers in any order You must however include a header before you reference any of the functions or objects that it declares Sections 9 3 1 Diagnostic Messages assert h cassert on page 9 14 through 9 3 15 Time Functions time h ctime on page 9 22 describe the header files that are included with the C6000 C C compiler Section 9 4 Summary of Run Time Support Functions and Macros on page 9 25 lists the functions that the
119. to a list of standard control registers for the C6000 see Table 7 2 If the name matches the compiler generates the code to reference the control register If the name does not match the compiler issues an error Table 7 2 Valid Control Registers Register Description AMR Addressing mode register CSR Control status register FADCR C6700 only Floating point adder configuration register FAUCR C6700 only Floating point auxiliary configuration register FMCR C6700 only Floating point multiplier configuration register GFPGFR C6400 only Galois field polynomial generator function register ICR Interrupt clear register IER Interrupt enable register IFR Interrupt flag register IRP Interrupt return pointer ISR Interrupt set register ISTP Interrupt service table pointer NRP Nonmaskable interrupt return pointer The cregister keyword can only be used in file scope The cregister keyword is not allowed on any declaration within the boundaries of a function It can only be used on objects of type integer or pointer The cregister keyword is not allowed on objects of any floating point type or on any structure or union objects The cregister keyword does not imply that the object is volatile If the control register being referenced is volatile that is can be modified by some external control then the object must be declared with the volatile keyword also Keywords To use the control registers in Table 7 2 you must declare ea
120. to distinguish commands that you enter from items that the system displays such as prompts command output error mes sages etc Here is a sample of C code include lt stdio h gt main l printf hello world n In syntax descriptions the instruction command or directive is in a bold face typeface and parameters are in italics Portions of a syntax that are in bold must be entered as shown portions of a syntax that are in italics describe the type of information that should be entered Syntax that is entered on a command line is centered in a bounded box cl6x options filenames z link_options object files Syntax used in a text file is left justified in a bounded box inline return type function name parameter declarations function Square brackets and identify an optional parameter If you use an optional parameter you specify the information within the brackets you do not enter the brackets themselves This is an example of a command that has an optional parameter load6x options filename out The load6x command has two parameters The first parameter options is optional The second parameter filename out is required Braces and indicate that you must choose one of the parameters within the braces you do not enter the braces themselves This is an ex ample of a command with braces that are not included in the actual syntax but indica
121. to execute a loop Resource bound The most used resource constrains the minimum itera tion interval For example if four instructions require a D unit they require at least two cycles to execute 4 instructions 2 parallel D units Unpartitioned resource bound The best possible resource bound val ues before the instructions in the loop are partitioned to a particular side Partitioned resource bound The resource bound values after the instructions are partitioned Resource partition This table summarizes how the instructions have been partitioned This information can be used to help assign functional units when writing linear assembly Each table entry has values for the A side and B side registers An asterisk is used to mark those entries that determine the resource bound value The table entries represent the following terms E L units is the total number of instructions that require L units E S units is the total number of instructions that require S units Optimizing Your Code 3 7 Optimizing Software Pipelining 3 8 D units is the total number of instructions that require D units M units is the total number of instructions that require M units X cross paths is the total number of X cross paths T address paths is the total number of address paths Long read path is the total number of long read port paths Long write path is the total number of long write port paths Logical ops LS is the
122. used in a source module are defined at the end of the compiled assembly language module The label SLn represents the address of the string constant The compiler uses this label to reference the string expression Because strings are stored in the const section possibly in ROM and shared it is bad practice for a program to modify a string constant The following code is an example of incorrect string use const char a abc a l Tx Incorrect Run Time Environment 8 15 Register Conventions 8 3 Register Conventions 8 16 Strict conventions associate specific registers with specific operations in the C C environment If you plan to interface an assembly language routine to aC C program you must understand and follow these register conventions The register conventions dictate how the compiler uses registers and how val ues are preserved across function calls Table 8 2 summarizes how the compiler uses the TMS320C6000 registers The registers in Table 8 2 are available to the compiler for allocation to regis ter variables and temporary expression results If the compiler cannot allocate a register of a required type spilling occurs Spilling is the process of moving a register s contents to memory to free the register for another purpose Objects of type double long orlong double are allocated into an odd even reg ister pair and are always referenced as a register pair for example A1 A0 The o
123. using the rounding mode set by the CSR register C6700 long _dtol double src Reinterperts double register pair src as a long register pair int _ext int src2 uint csta uint cstb EXT Extracts the specified field in src2 sign extended to 32 bits The extract is performed by a shift left followed by a signed shift right csta and cstb are the shift left and shift right amounts respectively int _extr int src2 int src7 EXT Extracts the specified field in src2 sign extended to 32 bits The extract is performed by a shift left followed by a signed shift right the shift left and shift right amounts are specified by the lower 10 bits of src1 uint _extu uint src2 uint csta uint cstb EXTU Extracts the specified field in src2 zero extended to 32 bits The extract is performed by a shift left followed by a unsigned shift right csta and cstb are the shift left and shift right amounts respectively uint _extur uint src2 int src1 EXTU Extracts the specified field in src2 zero extended to 32 bits The extract is performed by a shift left followed by a unsigned shift right the shift left and shift right amounts are specified by the lower 10 bits of src1 double _fabs double src float _fabsf float src T Instructions not specified with a device apply to all C6000 devices See the Tms320C6000 Programmer s Guide for more information ABSDP ABSSP Returns absolute value of
124. wide option that file is compiled separately For example if every C and C file in your project has a different set of file specific options each is compiled separately even though program level optimization has been specified To compile all C and C files together make sure the files do not have file specific options Be aware that compiling C and C files together may not be safe if previously you used a file specific option such as ma Performing Program Level Optimization pom and 03 Options 3 6 1 Controlling Program Level Optimization opn Option You can control program level optimization which you invoke with pm 03 by using the op option Specifically the op option indicates if functions in other modules can call a module s external functions or modify a module s ex ternal variables The number following op indicates the level you set for the module that you are allowing to be called or modified The 03 option com bines this information with its own file level analysis to decide whether to treat this module s external function and variable declarations as if they had been declared static Use Table 3 4 to select the appropriate level to append to the op option Table 3 4 Selecting a Level for the op Option If your module Use this option Has functions that are called from other modules and global vari op0 ables that are modified in other modules Does not have functio
125. 000 All of them are automatically inlined by the compiler The inlining happens automatically whether or not you use the optimizer For details about intrinsics and a list of the intrinsics see section 8 5 2 Using Intrinsics to Access Assembly Language Statements on page 8 25 2 10 2 Automatic Inlining When compiling C C source code with the 03 option inline function expan sion is performed on small functions For more information see section 3 10 Automatic Inline Expansion oi Option on page 3 29 2 36 Using Inline Function Expansion 2 10 3 Unguarded Definition Controlled Inlining The inline keyword specifies that a function is expanded inline at the point at which it is called rather than by using standard calling procedures The com piler performs inline expansion of functions declared with the inline keyword You must invoke the optimizer with any o option 00 01 02 or 03 to turn on definition controlled inlining Automatic inlining is also turned on when using 03 The following example shows usage of the inline keyword where the function call is replaced by the code in the called function Example 2 1 Using the inline keyword inline int volume_sphere float r return 4 0 3 0 PI r r x ine foo 4 lt n volume volume_sphere radius The pi option turns off definition controlled inlining This option is useful when you need a certain level of o
126. 0C6000 Assembly Language Tools User s Guide Linking C C Code 5 3 Invoking the Linker With the Compiler Shell z Option 5 2 5 4 Invoking the Linker With the Compiler Shell z Option The options and parameters discussed in this section apply to both methods of linking however when you link while compiling the linker options must fol low the z option see section 2 2 Invoking the C C Compiler Shell on page 2 4 By default the compiler does not run the linker However if you use the z op tion a program is compiled assembled and linked in one step When using z to enable linking remember that _j The z option divides the command line into compiler options the options before z and linker options the options following z _j The z option must follow all source files and other compiler options on the command line or be specified with the C_OPTION or C6X_C_OPTION environment variable All arguments that follow z on the command line are passed on to the linker These arguments can be linker command files additional object files linker options or libraries For example to compile and link all the c files in a directo ry enter cl6x sq c z c cmd o prog out 1 rts6200 1lib First all of the files in the current directory that have a c extension are com piled using the s interlist C C and assembly code and q run in quiet mode options Second the linker links the resulti
127. 10 initialization tables 8 47 initialized sections allocating in memory 5 11 defined A 4 described 8 3 inline assembly language 8 38 declaring functions as 2 38 definition controlled 2 38 disabling 2 37 inline keyword 2 38 _INLINE macro 2 25 _INLINE preprocessor symbol 2 38 inlining automatic expansion 3 29 function expansion 2 36 unguarded definition controlled 2 37 intrinsic operators 2 36 restrictions 2 40 input file changing default extensions 2 20 changing interpretation of filenames 2 19 default extensions 2 18 extensions summary 2 8 summary of options 2 8 input output definitions 9 15 integer division 9 54 integrated preprocessor defined A 4 interfacing C and assembly 8 22 to 8 40 Index 9 Index interlist utility defined A 4 described 1 3 invoking 2 17 invoking with shell program 2 43 used with the optimizer 3 30 interrupt flexibility options 2 41 handling described 8 41 saving registers 7 10 interrupt keyword 7 10 INTERRUPT pragma 7 27 intrinsics inlining operators 2 36 using to call assembly language state ments 8 25 inverse tangent of y x 9 45 invoking C name demangler 11 2 library build utility 10 3 linker 5 2 shell program 2 4 standalone simulator 6 2 isalnum function 9 67 isalpha function 9 67 isascii function 9 67 iscntrl function 9 67 isdigit function 9 67 isgraph function 9 67 islower function 9 67 isprint function 9 67 ispunch function 9 67 isspace function 9 67
128. 2 20 epilog defined A 3 epilog collapsing 3 13 speculative execution 3 13 EPROM programmer 1 4 ERANGE macro 9 15 errno h header 9 15 error errno h header file 9 15 indicators functions 9 50 mapping function 9 77 message macro 9 26 messages See also diagnostic messages handling with options 2 32 preprocessor 2 24 escape sequences 7 2 7 35 exception handling 9 24 exception include file 9 24 executable module defined A 3 exit functions abort function 9 37 atexit 9 46 exit function 9 55 exp function 9 55 exp10 function 9 56 exp10f function 9 56 exp2 function 9 56 exp2f function 9 56 expf function 9 55 exponential math functions described 9 18 exp function 9 55 exp10 function 9 56 exp10f function 9 56 exp2 function 9 56 exp2f function 9 56 expf function 9 55 expression C language 7 3 defined A 3 simplification 3 41 extensions abs 2 18 asm 2 18 C 2 18 c 2 18 cc 2 18 cpp 2 18 cxx 2 18 nfo 3 19 obj 2 18 s 2 18 sa 2 18 4 4 specifying 2 20 external declarations 7 35 external symbol defined A 3 f linker option 5 6 fa shell option 2 19 fabs function 9 57 fabsf function 9 57 far keyword 7 11 far section allocating in memory 5 11 described 8 3 _FAR_RTS macro 9 18 fatal error 2 29 fb shell option 2 21 fc shell option 2 19 fclose function 9 57 feof function 9 57 ferror function 9 58 ff shell option 2 21 fflush function 9 58 fgetc function 9 58 fgetpos function 9 58 fgets function 9 59 Index
129. 3 125 1021 1021 128 1024 1024 1 19209290e 07 2 22044605e 16 2 22044605e 16 1 17549435 e 38 2 22507386e 308 2 22507386e 308 3 40282347 e 38 1 79769313 6 308 1 79769313 e 308 37 307 307 38 308 308 Description Base or radix of exponent representation Rounding mode for floating point addition Number of decimal digits of precision for a float double or long double Number of base FLT_RADIX digits in the mantissa of a float double or long double Minimum negative integer such that FLT_RADIX raised to that power minus 1 is a normalized float double or long double Maximum negative integer such that FLT_RADIX raised to that power minus 1 is a representable finite float double or long double Minimum positive float double or long double number x such that 1 0 x 1 0 Minimum positive float double or long double Maximum float double or long double Minimum negative integers such that 10 raised to that power is in the range of normalized floats doubles or long doubles Maximum positive integers such that 10 raised to that power is in the range of representable finite floats doubles or long doubles Legend FLT_ applies to type float DBL_ applies to type double LDBL_ applies to type long double Note The precision of some of the values in this table has been reduced for readability Refer to the float h cfloat header file supplied with the compiler for the
130. 3 Con trolling How Run Time Support Functions Are Called mr Option on page 7 12 9 1 1 Linking Code With the Object Library 9 2 When you link your program you must specify the object library as one of the linker input files so that references to the I O and run time support functions can be resolved You should specify libraries aston the linker command line because the linker searches a library for unresolved references when it encounters the library on the command line You can also use the x linker option to force repeated searches of each library until the linker can resolve no more references When a library is linked the linker includes only those library members re quired to resolve undefined references For more information about linking see the TMS320C6000 Assembly Language Tools User s Guide C C and mixed C and C programs can use the same run time support library Run time support functions and variables that can be called and refer enced from both C and C will have the same linkage Libraries 9 1 2 Modifying a Library Function You can inspect or modify library functions by using the archiver to extract the appropriate source file or files from the source libraries For example the fol lowing command extracts two source files ar6 x x rts srce atoi c strcpy c To modify a function extract the source as in the previous example Make the required changes to the code recompile and reinstal
131. 3 calling conventions accessing arguments and local variables 8 21 how a called function responds 8 19 to 8 21 how a function makes acall 8 18 to 8 19 register usage 8 17 calloc function 9 75 described 9 49 dynamic memory allocation 8 5 reversing 9 62 cassert header described 9 14 summary of functions 9 26 cctype header described 9 14 summary of functions 9 26 ceil function 9 49 ceilf function 9 49 ceiling functions 9 49 cerrno header 9 15 cfloatheader 9 16 to 9 17 character conversion functions a number of characters 9 101 described 9 14 summary of 9 26 escape sequences in 7 35 find function 9 90 matching functions strobrk 9 98 strrchr 9 98 sirspn 9 99 Index 3 Index character continued read functions multiple characters 9 59 single character 9 58 string constants 8 15 type testing function 9 67 unmatching function 9 92 character sets 7 2 cinit section allocating in memory 5 11 assembly module use of 8 23 described 8 3 use during autoinitialization 5 10 cl6x command 2 4 clear EOF functions 9 50 clearerr function 9 50 clearerrf function 9 50 climits header 9 16 to 9 17 CLK_TCK macro 9 22 clock function 9 50 clock_tdatatype 9 22 CLOCKS_PER_SEC macro described 9 23 usage 9 50 close file function 9 57 close I O function 9 7 cmath header described 9 18 summary of functions 9 27 to 9 29 code generator defined A 2 code size reducing 3 5 3 17 _CODE_ACCESS macro 9 18 CODE_SECTION pragma 7 19 COFF defined A 2
132. 5 3 Using Unaligned Data and 64 Bit Values for details on manipulating 8 byte data quantities 8 30 Interfacing C and C With Assembly Language Table 8 3 TMS320C6000 C C Compiler Intrinsics Continued Assembly C C Compiler Intrinsic Instruction Description Devicet int_mpyhir int src7 int src2 MPYHIR Produces a signed 16 by 32 multiply C6400 he y The result is shifted right by 15 bits int_mpylir int src7 int src2 MPYLIR Can use the upper or lower 16 bits of srci double _mpyid int src7 int src2 MPYID Produces a signed integer multiply 6700 The result is placed in a register pair double _mpysu4 int src7 unsigned src2 MPYSU4 For each 8 bit quantity in src1 and C6400 double _mpyu unsigned src1 MPYU4 Stee Penns an Epi by S bitnu unsigned src2 ply The four 16 bit results are packed z into a double The results can be signed or unsigned int _mvd int src2 MVD Moves the data from src2 to the return C6400 value over four cycles using the mul tipler pipeline void _nassert int Generates no code Tells the optimizer that the expression declared with the assert function is true this gives a hint to the optimizer as to what optimizations might be valid uint _norm int src2 NORM Returns the number of bits up to the uint _Inorm long src2 first nonredundant sign bit of src2 unsigned _pack2 unsigned src7 PACK2 The lower upper half words of src1 C6400 unsigned src2 and src2 are p
133. 7 Do Not Lower the Optimization Level to Control Code Size 000 eee eee eee 3 18 03 Optimization and Inlining 00 eee eens 3 29 Inlining and God Size ceis wie keke isd anre ed rA a e ideas eaha nheabitads sheb eid 3 29 Impact on Performance and Code Size 0 cece teens 3 30 The g or gw Option Causes Performance and Code Size Degradations 3 33 Profile PONS ii ce te eet ek eet eet edger eestor eerie ete a teeth aber eee 3 34 Finer Grained Profiling i sia cakes enia enire thal wea stata a a a e asi eee taka 3 34 Do Not Use Scheduled Assembly Code as Source 0 000 c cece tenes 4 5 Reserving Registers A4 and A5 0 eect e tte eens 4 30 Memory Dependency Exception 0 0 ees 4 44 Memory Dependence Bank Conflict 0 0c cece nett eens 4 47 Thes cuint0O SYMbO l awe weeieweciave cps chnie thee RERE ta a EREE AER 5 9 Defining Global Variables in Assembly Code 000 cece cette eee n eens 7 12 Avoid Disrupting the C C Environment With asm Statements 00 cece neces 7 17 The Linker Defines the Memory Map 0 0 0 cece cette eee eens 8 2 Use Only Code in Program Memory 0060 c cece eee eee e eens 8 3 Stack Overflow saena cries eles Ge chan Cake aa essere ieee tas 8 5 Intrinsic Instructions in C versus Assembly Language 0 cee ee eee ee eee eens 8 25 C Syntax for _nassert 0 cece nent eee eee
134. 77 modulus 7 3 mr shell option 7 12 ms shell option 3 17 mt shell option 3 26 to 3 27 with assembly optimizer 3 27 4 44 multibyte characters 7 2 multiply by power of 2 function 9 69 MUST_ITERATE pragma 7 28 n option linker 5 7 shell 2 17 _nassert intrinsic 8 35 NASSERT macro 9 14 natural logarithm functions 9 70 NDEBUG macro 9 14 9 44 near keyword 7 11 near position independent data 8 7 new header 9 24 new_handler type 9 24 nfo extension 3 19 NMI_LINTERRUPT pragma 7 29 no_mdep 4 44 nonlocal jump function 9 30 nonlocal jump functions and macros described 9 85 summary of 9 30 notational conventions iv NULL macro 9 20 o option linker 5 7 shell 3 2 standalone simulator 6 4 obj extension 2 18 object file defined A 6 object library defined A 6 linking code with 9 2 offsetof macro 9 20 oi shell option 3 29 ol shell option 3 18 on shell option 3 19 op shell option 3 21 to 3 23 open file function 9 60 9 63 open I O function 9 8 operand defined A 6 optimizations alias disambiguation 3 38 branch 3 38 control flow simplification 3 38 controlling the level of 3 21 cost based register allocation 3 36 data flow 3 41 expression simplification 3 41 file level defined A 4 described 3 18 induction variables 3 43 information file options 3 19 inline expansion 3 42 levels 3 2 list of 3 35 to 3 46 loop rotation 3 44 loop invariant code motion 3 44 program level defined A 7 described 3 20 r
135. 8 15 Figure 8 1 Char and Short Data Storage Format MS LS ee SSSSSSSSSSSSSSSSSSSSSSSSSIIiliii 31 7 0 MS LS Unsigned o o0000000000000000000000UuUuuuuuuUuU 8 bit char Ai 5 Signed 16 bit leg 6 So s So SSS 55 5 6 5 short MS LS Unsigned o o00000000000000UUUUuUuuuuuuUuUUuUUUU 16 bit short 31 15 0 Legend S sign MS most significant signed integer LS least significant U unsigned integer Run Time Environment 8 9 Object Representation 8 2 1 2 enum float and int Data Types signed and unsigned The int unsigned int enum and float data types are storedin memory as 32 bit objects see Figure 8 2 Objects of these types are loaded to and stored from bits 0 32 of a register In big endian mode 4 byte objects are loaded to regis ters by moving the first byte that is the lower address of memory to bits 24 31 of the register moving the second byte of memory to bits 16 23 moving the third byte to bits 8 15 and moving the fourth byte to bits 0 7 In little endian mode 4 byte objects are loaded to registers by moving the first byte that is the lower address of memory to bits 0 7 of the register moving the second byte to bits 8 15 moving the third byte to bits 16 23 and moving the fourth byte to bits 24 31 Figure 8 2 32 Bit Data Storage Format Single MS LS precision S E EEEEEEE MMMMMMMMMMMMMMMMMMMMMMN floating point 34 23 0 Signed 32 bit MS LS integer or SIN kT ep
136. 9 The second edition of The C Pro gramming Language is based on the ANSI standard and is a reference ANSI C encompasses many of the language extensions provided by recent C com pilers and formalizes many previously unspecified characteristics of the lan guage The ANSI standard identifies some features of the C language that are affected by characteristics of the target processor run time environment or host environment For reasons of efficiency or practicality this set of features can differ among standard compilers This section describes how these fea tures are implemented for the C6000 C C compiler The following list identifies all such cases and describes the behavior of the C6000 C C compiler in each case Each description also includes a refer ence to more information Many of the references are to the formal ANSI stan dard or to the second edition of The C Programming Language by Kernighan and Ritchie K amp R Identifiers and Constants I Thefirst 100 characters of all identifiers are significant Case is significant uppercase and lowercase characters are distinct for identifiers These characteristics apply to all identifiers internal and external ANSI 3 1 2 K amp R A2 3 J The source host and execution target character sets are assumed to be ASCII There are no multibyte characters ANSI 2 2 1 K amp R A12 1 Hex or octal escape sequences in character or string constants may have values up to 32 b
137. 9 16 Table 7 1 TMS320C6000 C C Data Types Type char signed char unsigned char short unsigned short int signed int unsigned int long signed long unsigned long enum float double long double pointers references pointer to data members Size 8 bits 8 bits 16 bits 16 bits 32 bits 32 bits 40 bits 40 bits 32 bits 32 bits 64 bits 64 bits 32 bits t Figures are minimum precision 7 6 Representation ASCII ASCII 2s complement Binary 2s complement Binary 2s complement Binary 2s complement IEEE 32 bit IEEE 64 bit IEEE 64 bit Binary Range Minimum Maximum 128 127 0 255 32 768 32 767 0 65 535 2 147 483 648 0 549 755 813 888 0 2 147 483 648 1 175 494e 38T 2 22 507 385e 308T 2 22 507 385e 308t 0 2 147 483 647 4 294 967 295 549 755 813 887 1 099 511 627 775 2 147 483 647 3 40 282 346e 38 1 79 769 313e 308 1 79 769 313e 308 OxFFFFFFFF 7 4 Keywords Keywords The C6000 C C compiler supports the standard const register restrict and volatile keywords In addition the C6000 C C compiler extends the C C language through the support of the cregister interrupt near and far key words 7 4 1 The const Keyword The TMS320C6000 C C compiler supports the ANSI standard keyword const This keyword gives you greater optimization and control over allocation of storage for certain data objects You can apply the const qualifier to the defi nition of a
138. 9 53 9 67 9 69 9 76 9 93 9 103 9 5 Description of Run Time Support Functions and Macros Syntax for C Syntax for C Defined in Description Example abs labs Syntax for C Syntax for C Defined in Description abs labs This section describes the run time support functions and macros For each function or macro the syntax is given in both C and C Because the func tions and macros originated from C header files however program examples are shown in C code only The same program in C code would differ in that the types and functions declared in the header file are introduced into the std namespace Abort include lt stdlib h gt void abort void include lt cstdlib gt void std abort void exit c in rts src The abort function terminates the program void abort void exit EXIT_FAILURE _ See the exit function on page 9 55 Absolute Value include lt stdlib h gt int abs int i long labs long i include lt cstdlib gt int std abs int i long std labs long i abs c in rts src The C C compiler supports two functions that return the absolute value of an integer Run Time Support Functions Lj The abs function returns the absolute value of an integer i Lj The labs function returns the absolute value of a long i 9 37 acos acosf acos acosf Syntax for C Syntax for C Defined in Description Example
139. B L1 Al 4 Al ADD S1 A3 A0 A0 21 a 1 a l1 ADD S2 B7 B8 B8 27 suml a 0 b O MPY M1X B9 A8 A4 18 a 0 b 0 MPYH M2X A5 B1 B8 26 a 3 b 3 BO ADD L2 Oxfffffffc BO BO 30 cnt Al LDW D1T1 A6 8 A5 23 load a 2 Al LDW D2T2 B6 8 Bl E 24 load b 2 4 3 3 4 3 3 Using Linear Assembly Source Comments A commentin linear assembly can begin in any column and extends to the end of the source line A comment can contain any ASCII character including blanks Comments are printed in the linear assembly source listing but they do not affect the linear assembly A source statement that contains only a comment is valid If it begins in col umn 1 it can start with a semicolon or an asterisk Comments that begin anywhere else on the line must begin with a semicolon The asterisk identifies a comment only if it appears in column 1 The assembly optimizer schedules instructions that is it rearranges instruc tions Stand alone comments are moved to the top of a block of instructions Comments at the end of an instruction statement remain in place with the instruction The assembly optimizer attaches comments on instructions from the input lin ear assembly to the output file It attaches iteration delta characters to the comments to specify the iteration of the loop that an instruction is on in the soft ware pipeline Zero chara
140. BRANCH OCCURS B S2 ____compute__FiPi NOP 5 RLO CALL OCCURS LDW D2T2 DP _last_err 1 BO MV L1 A4 A0 LDW D2 T2 SP 4 B3 NOP 1 L1 NOP 3 B 792 B3 W STW DZEZ BO B10 LDW D2T2 SP 8 B10 MV spa A0 A4 NOP 3 BRANCH OCCURS Executing the C name demangler utility demangles all names that it be lieves to be mangled If you enter dem6x foo asm the result is shown in Example 11 2 Notice that the linknames of foo and compute are demangled Sample Usage of the C Name Demangler Example 11 2 Result After Running the C Name Demangler Utility Fs RR RA ADE A PIS SAMMI RAO Aa AICI II BASIC IRIE RA I ee te Aa eg Ie Ri RGR ea OA FUNCTION DEF foo short int ITOK A ER IIA I IER AK TEE aa IIR FORK FEI IE IO IER I IP IKE EK FORGE RC foo short int LDW sD2T2 DP _last_err 1 BO VK 81 _last_err S1 Sbss A0 OP 3 BO B 81 Li STW D2T2 B10 SP 8 STW D2T2 B3 SP 4 I VKL 52 RLO B3 VKH 82 RLO B3 v D2 B4 B10 ADD Shox DP AO B4 I ZERO vLE AO BO LDW sD2T2 SP 4 B3 OP 1 BRANCH OCCURS B 2 compute int int OP 5 RLO 7 CALL OCCURS LDW D2T2 DP _last_err 1 BO v BT A4 A0 LDW D2 T2 SP 4 B3 OP 4 L1 OP 3 B 52 B3 STW D2T2 BO B1LO LDW D2T2 SP 8 B10 V Tel A0 A4 OP 3 BRANCH OCCURS C Name Demangler 11 5 Appendix A Glossary ANSI See American National Standards Institute alias disamb
141. Branch Optimizations and Control Flow Simplification 3 38 The compiler analyzes the branching behavior of a program and rearranges the linear sequences of operations basic blocks to remove branches or redundant conditions Unreachable code is deleted branches to branches are bypassed and conditional branches over unconditional branches are simpli fied to a single conditional branch When the value of a condition is determined at compile time through copy propagation or other data flow analysis the the compiler can delete a condi tional branch Switch case lists are analyzed in the same way as conditional branches and are sometimes eliminated entirely Some simple control flow constructs are reduced to conditional instructions totally eliminating the need for branches In Example 3 5 the switch statement and the state variable from this simple finite state machine example are optimized completely away leaving a streamlined series of conditional branches What Kind of Optimization Is Being Performed Example 3 5 Control Flow Simplification and Copy Propagation a C source fsm enum ALPHA BETA GAMMA OMEGA state ALPHA int input while state OMEGA switch state case ALPHA state inputt 0 BETA GAMMA break case BETA state inputt 0 GAMMA ALPHA break case GAMMA state inputt 0 GAMMA OMEGA break main fsm
142. C6000 Assembly Language Tools User s Guide Linking C C Code 5 7 Controlling the Linking Process 5 5 Controlling the Linking Process 5 5 1 5 8 Regardless of the method you choose for invoking the linker special requirements apply when linking C C programs You must Lj Include the compiler s run time support library J Specify the type of initialization Lj Determine how you want to allocate your program into memory This section discusses how these factors are controlled and provides an example of the standard default linker command file For more information about how to operate the linker see the linker description in the TMS320C6000 Assembly Language Tools User s Guide Linking With Run Time Support Libraries You must link all C C programs with a run time support library The library contains standard C C functions as well as functions used by the compiler to manage the C C environment You must use the linker option to specify which C6000 run time support library to use The l option also tells the linker to look at the i options and then the C_DIR or C6X_C_DIR environment vari able to find an archive path or object file To use the l linker option type on the command line Ink6x c cr filenames l libraryname Generally you should specify the library as the last name on the commandline because the linker searches libraries for unresolved references in the order that
143. EBUG 9 14 NULL 9 20 offsetof 9 20 predefined names 2 24 to 2 25 Index 11 Index macros continued SEEK_CUR_ 9 21 SEEK_END 9 21 SEEK_SET 9 21 setimp 9 19 stden 9 21 stdin 9 21 stdout 9 21 TMP_MAX 9 21 malloc function 9 75 allocating memory 9 72 dynamic memory allocation 8 5 reversing 9 62 map file defined A 6 math h header described 9 18 summary of functions 9 27 to 9 29 mb shell option 2 42 mdep 4 45 me shell option 2 16 memalign function 9 72 memchr function 9 73 memcmp function 9 73 memcpy function 9 74 memmove function 9 74 memory alias disambiguation 4 44 memory aliasing 4 44 examples 4 47 memory bank scheme interleaved 4 34 four bank memory 4 34 with two memory spaces 4 35 memory banks 4 34 memory compare function 9 73 memory dependence 4 44 4 45 exceptions 4 44 memory management functions calloc 9 49 free 9 62 malloc function 9 72 minit 9 75 realloc function 9 81 memory map defined A 6 memory model described 8 2 dynamic memory allocation 8 5 large memory model 8 6 Index 12 memory model continued sections 8 3 small memory model 8 6 stack 8 4 variable initialization 8 6 memory pool malloc function 9 72 reserved space 8 3 memory reference annotating 4 45 default handling by assembly optimizer 4 44 memset function 9 74 mh shell option 3 14 mi shell option 2 41 minit function 9 75 mk6x 10 3 11 2 mktime function 9 76 ml shell option 2 16 modf function 9 77 modff function 9
144. F i 6 amp COEF it 7 STH DI Assum Aout 2 oPtr r gt gt 15 STH D2 Bssum Bout 2 oPtr i gt gt 15 Using the Assembly Optimizer 4 37 Avoiding Memory Bank Conflicts With the Assembly Optimizer 4 5 2 A Dot Product Example That Avoids Memory Bank Conflicts The C code in Example 4 9 implements a dot product function The inner loop is unrolled once to take advantage of the C6000 s ability to operate on two 16 bit data items in a single 32 bit register LDW instructions are used to load two consecutive short values The linear assembly instructions in Example 4 10 implement the dotp loop kernel Example 4 11 shows the loop kernel determined by the assembly optimizer For this loop kernel there are two restrictions associated with the arrays a and b _j Because LDW is being used the arrays must be be aligned to start on word boundaries _j To avoid a memory bank conflict one array must start in bank 0 and the other array in bank 2 If they start in the same bank then a memory bank conflict occurs every cycle and the loop computes a result every two cycles instead of every cycle due to a memory bank stall For example Bank conflict MVK 0 AO MVK 8 BO LDW A0 Al LDW BO Bl No bank conflict MVK 0 AO MVK 4 BO LDW A0 Al LDW BO B1 Example 4 9 C Code for Dot Product 4 38 int dotp short a short b int sum0 0 s
145. F out file This is the general syntax for invoking the stand alone simulator load6x options filename out load6x The command that invokes the stand alone simulator options Options affect how the stand alone simulator acts and how it handles your out file Options can appear anywhere on the command line Options are discussed in section 6 2 Stand Alone Simulator Options filename out Names the out file to be loaded into the stand alone simu lator The out file must be an executable COFF file The stand alone simulator can run C6200 C6400 and C6700 files No op tions are needed to specify either a floating point or fixed point out file The stand alone simulator determines the target version by reading COFF flags in the out file The banner generated upon invoking the stand alone simulator defines the values memory map silicon revision fast or slow version of load6x etc used to load and run the out file Example 6 1 provides two instances of the banner Invoking the Stand Alone Simulator Example 6 1 Sample Stand Alone Simulator Banners a The file clock out invoked with no options load6x clock out TMS320C6x Standalone Simulator Version X X Copyright c 1989 2000 by Texas Instruments Incorporated OPTIONS C6xxx Simulator OPTIONS REVISION 2 OPTIONS MAP 1 DEFAULT MEMORY MAPPING NOTE For details on above options please refer to the readme 1
146. FILE _fp long _ offset int _ptrname int fsetpos FILE _fp const fpos_t _pos long ftell FILE _fp size_t fwrite const void _ptr size_t _size size_t_count register FILE _fp int getc FILE _fp int getchar void char gets char _ptr void perror const char _s int printf const char _format int pute int _x FILE _fp int putchar int _ x Summary of Run Time Support Functions and Macros Description Opens the file that_fname points to _ mode points to a string describing how to open the file Writes to the stream that _fp points to Writes a single character _c to the stream that _fp points to Writes the string pointed to by _ptr to the stream pointed to by _ fp Reads from the stream pointed to by _fp and stores the input to the array pointed to by _ ptr Opens the file that _fname points to using the stream that _fp points to _ mode points to a string describing how to open the file Reads formatted input from the stream that _fp points to Sets the file position indicator for the stream that _ fp points to Sets the file position indicator for the stream that _fp points to to _pos The pointer _pos must be a value from fgetpos on the same stream Obtains the current value of the file position indica tor for the stream that _fp points to Writes a block of data from the memory pointed to by _ptr to the stream that _fp points to Reads the next character in the stream that _fp p
147. Functions gsm h 000 0 cece eee 9 15 9 3 6 Limits float h cfloat and limits h climits 0 0 eee eee 9 16 10 11 Contents 9 3 7 Function Calls as near or far linkage h 00 cece eee eee eee 9 18 9 3 8 Floating Point Math math h cmath 0 00 cece eee ee 9 18 9 3 9 Nonlocal Jumps setjmp h csetimp 6 c eee eee 9 19 9 3 10 Variable Arguments stdarg h cstdarg cece eee eee 9 19 9 3 11 Standard Definitions sttdef h cstddef 0 0 0 cece ee 9 20 9 3 12 Input Output Functions stdio h cstdio 2 2 c cee ee 9 20 9 3 13 General Utilities stdlib h cstdlib 0 ee 9 21 9 3 14 String Functions string h cstring 0 eee 9 22 9 3 15 Time Functions time h ctime 02 eee 9 22 9 3 16 Exception Handling exception and stdexcept eee eee eee 9 24 9 3 17 Dynamic Memory Management new 0 eee eee eee eee 9 24 9 3 18 Run Time Type Information typeinfo 0 cece eee eee 9 24 9 4 Summary of Run Time Support Functions and Macros 0ce eee eee 9 25 9 5 Description of Run Time Support Functions and Macros 000eeeeee 9 37 Library Build Utinitys oss is e c cscs c sec aie cect ef cpese scents ele Sista pie n E eile rg ciece a a Sis 10 1 Describes the utility that custom makes run time support libraries for the options used to com pile code You can use this utility to insta
148. ILE _fp include lt cstdio gt size_t std fread void _ptr size_t _size size_t count FILE _fp fread c in rts src The fread function reads from the stream pointed to by _ fp The input is stored in the array pointed to by _ ptr The number of objects read is _count The size of the objects is _ size Deallocate Memory include lt stdlib h gt void free void packet include lt cstdlib gt void free void packet memory c in rts src The free function deallocates memory space pointed to by packet that was previously allocated by a malloc calloc or realloc call This makes the memory space available again If you attempt to free unallocated space the function takes no action and returns For more information see section 8 1 3 Dynamic Memory Allocation on page 8 5 This example allocates ten bytes and frees them char 3 lt x malloc 10 allocate 10 bytes Af free x free 10 bytes Syntax for C Syntax for C Defined in Description frexp frexpf Syntax for C Syntax for C Defined in Description Example frexp frexpf Open File include lt stdio h gt FILE freopen const char _fname const char _mode register FILE _ fp include lt cstdio gt FILE std freopen const char _fname const char _mode register FILE _fp fopen c in rts src The freopen function opens the file pointed to by _ fname and associates with it the stream pointed to by _ fp The s
149. Increase Performance 4 1 Code Development Flow to Increase Performance You can achieve the best performance from your C6000 code if you follow this flow when you are writing and debugging your code Develop C C ici Yes Efficient Complete No enough Refine C C code Phase 2 code Efficient enough Yes Complete No Yes ore C C optimizations No P Write linear assembly Phase 3 Write linear Assembly optimize assembly Complete 4 2 Code Development Flow to Increase Performance There are three phases of code development for the C6000 D Phase 1 write in C You can develop your C C code for phase 1 without any knowledge of the C6000 Use the stand alone simulator with the g option see section 6 3 Using the Profiling Capability of the Stand Alone Simulator on page 6 6 to identify any inefficient areas in your C C code To improve the performance of your code proceed to phase 2 I Phase 2 refine your C C code In phase 2 use the intrinsics and shell options that are described in this book to improve your C C code Use the stand alone simulator with the g option to check the performance of your altered code Refer to the TMS320C6000 Programmer s Guide for hints on refining C C code If your code is still not as efficient as you would like it to be proceed to phase 3 J Phase 3 write linear assembly In this phase you extract the tim
150. Indicators include lt stdio h gt void clearerr FILE _fp include lt cstdio gt void std clearerr FILE _fp clearerr c in rts src The clearerr functions clears the EOF and error indicators for the stream that _ fp points to Processor Time include lt time h gt clock_t clock void include lt ctime gt clock_t std clock void clock c in rts src The clock function determines the amount of processor time used It returns an approximation of the processor time used by a program since the program began running The time in seconds is the return value divided by the value of the macro CLOCKS_ PER_SEC If the processor time is not available or cannot be represented the clock func tion returns the value of clock_t 1 kees s 430 st a Eo _ i Note Writing Your Own Clock Function The clock function works with the stand alone simulator load6x Used in the load6x environment clock returns a cycle accurate count The clock func tion returns 1 when used with the HLL debugger A host specific clock function can be written You must also define the CLOCKS_PER_SEC macro according to the units of your clock so that the value returned by clock number of clock ticks can be divided by CLOCKS_PER_SEC to produce a value in seconds eee eee For more information about the functions and types that the time h header declares and defines see section 9 3 15 Time Functions time h o
151. K The first entry in the device table is predefined to be the host device on which the debugger is running The low level routine add_device finds the first empty position in the device table and initializes the device fields with the passed in arguments For a complete description see the add_device function on page 9 40 9 11 The C I O Functions 3 Once the device is added call fopen to open a stream and associate it with that device Use devicename filename as the first argument to fopen The following program illustrates adding and using a device for C I O include lt stdio h gt RK HK IK IK I I KI I I I I I I I I I I I I I I I HO He Declarations of the user defined device drivers AE RK IK IK I I I I I I I I I I I I I I I I I I I I I I I HO He extern int my_open char path unsigned flags int fno extern int my_close int fno extern int my_read int fno char buffer unsigned count extern int my_write int fno char buffer unsigned count extern long my_lseek int fno long offset int origin extern int my_unlink char path extern int my_rename char old_name char new_name main FILE fid m add_device mydevic _MSA my_open my_close my_read my_write my_lseek my_unlink my_rename fid fopen mydevice test w fprintf fid Hello world n fclose fid 9 12 9 3 Header Files Header Files Each run
152. KK KKK KKK KKK KKK KKK KKK KKK KKK KKK KKK Area Name Excl Max CF main 134 1 CF dot_prodl 60 lt 1 CF dot_prod2 55 lt I CF dot_prod3 35 lt l KKK KKK KKK KKK KKK KKK KKK KKK KKK KKK KKK KKK KK KKK KKK KKK KKK KKK KK KKK KKK KKK KKK KK KKK KKK Area Name Address CF dot_prodl 000052c0 CF dot_prod2 000053a4 CF dot_prod3 00005444 CF main 0000554c Using the Stand Alone Simulator 6 7 Selecting Silicon Revision to Simulate rev Option 6 4 Selecting Silicon Revision to Simulate rev Option A new silicon revision option allows the standalone simulator to support both revisions 2 and 3 of C6000 silicon By default the standalone simualtor simu lates revision 2 silicon load6x rev value file out The valid values are 2 to select revision 2 silicon and 3 to select revision 3 sili con In revision 3 silicon the internal data memory has been divided into two memory spaces Ox8000000 0x80007fff and 0x800800 0x800ffff allowing accesses to the same bank of memory if you are accessing different halves For example MVK S52 0x80000000 B5 MVKH S2 0x80000000 B5 MVK S1 0x80008000 A5 MVKH S1 Ox80008000 A5 LDW D2 B5 B6 LDW D1 A5 A6 In this example the LDW instructions in parallel do not cause a memory bank conflict in revision 3 silicon while it will in revision 2 silicon For an illustration of an interleaved memory with two memory s
153. Register Conventions Special Uses Return register address to return to Argument 2 Argument 2 with B4 for doubles and longs Argument 4 Argument 4 with B6 for doubles and longs Argument 6 Argument 6 with B8 for doubles and longs Argument 8 Argument 8 with B10 for doubles and longs Argument 10 Argument 10 with B12 for doubles and longs Data page pointer DP Stack pointer SP Run Time Environment 8 17 Function Structure and Calling Conventions 8 4 Function Structure and Calling Conventions 8 4 1 8 18 The C C compiler imposes a strict set of rules on function calls Except for special run time support functions any function that calls or is called by a C C function must follow these rules Failure to adhere to these rules can disrupt the C C environment and cause a program to fail How a Function Makes a Call A function parent function performs the following tasks when it calls another function child function 1 Arguments passed to a function are placed in registers or on the stack If arguments are passed to a function up to the first ten arguments are placed in registers A4 B4 A6 B6 A8 B8 A10 B10 A12 and B12 If longs doubles or long doubles are passed they are placed in register pairs A5 A4 B5 B4 A7 A6 and so on Any remaining arguments are placed on the stack that is the stack pointer points to the next free location SP offset points to the eleventh ar
154. Syntax for C Syntax for C Defined in Description asin asinf Syntax for C Syntax for C Defined in Description Example asin asinf Convert Internal Time to String include lt time h gt char asctime const struct tm timeptr include lt ctime gt char std asctime const struct tm timeptr asctime c in rts src The asctime function converts a broken down time into a string with the following form Mon Jan 11 11 18 36 1988 n 0 The function returns a pointer to the converted string For more information about the functions and types that the time h header declares and defines see section 9 3 15 Time Functions time h on page 9 22 Arc Sine include lt math h gt double asin double x float asinf float x include lt cmath gt double std asin double x float std asinf float x asin c and asinf c in rts src The asin and asinf functions return the arc sine of a floating point argument x which must be in the range 1 1 The return value is an angle in the range 1 2 1 2 radians double realval radians realval 1 0 radians asin realval asin returns 7 2 Run Time Support Functions 9 43 asinh asinhf asinh asinhf Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C Defined in Description 9 44 Hyperbolic Arc Sine define TIENHANCED_MATH_H 1 include lt math h gt double asinh double x f
155. The computation is moved in front of the loop and each occur rence of the expression in the loop is replaced by a reference to the precom puted value 3 13 9 Loop Rotation The compiler evaluates loop conditionals at the bottom of loops saving an ex tra branch out of the loop In many cases the initial entry conditional check and the branch are optimized out 3 13 10 Register Variables The compiler helps maximize the use of registers for storing local variables parameters and temporary values Accessing variables stored in registers is more efficient than accessing variables in memory Register variables are par ticularly effective for pointers see Example 3 4 on page 3 36 3 13 11 Register Tracking Targeting The compiler tracks the contents of registers to avoid reloading values if they are used again soon Variables constants and structure references such as a b are tracked through straight line code Register targeting also computes expressions directly into specific registers when required as in the case of as signing to register variables or returning values from functions see Example 3 8 on page 3 45 3 44 Example 3 8 Register Tracking Targeting a C source What Kind of Optimization Is Being Performed int Rp yy main x 1 y Xi b Compiler output FP set ATS DP set B14 SP set B15 2Seet global _main LDW NOP B NOP ADD STW STW global bs
156. _sect global _fn sym Eie Pty Se yaa Oo func 3 TMS320C6000 C C Language Implementation 7 19 Pragma Directives 7 7 2 The DATA_ALIGN Pragma The DATA_ALIGN pragma aligns the symbol to an alignment boundary The alignment boundary is the maximum of the symbol s default alignment value or the value of the constant in bytes The constant must be a power of 2 The syntax of the pragma in C is pragma DATA_ALIGN symbol constant The syntax of the pragma in C is pragma DATA_ALIGN constant 7 7 3 The DATA_MEM_BANK Pragma The DATA_MEM_BANK pragma aligns a symbol or variable to a specified C6000 internal data memory bank boundary The constant specifies a specific memory bank to start your variables on See Figure 4 1 on page 4 34 fora graphic representation of memory banks The value of constant depends on the C6000 device C6200 An even number between 0 and the number of memory banks on your C6200 parts minus 1 For example for the C6201 with four memory banks 0 1 2 and 3 constant can be 0 or 2 C6400 An even number between 0 and 15 for data banks 0 15 on C6400 parts C6700 An even number between 0 and 7 for data banks 0 7 on the cur rent C6700 parts The syntax of the pragma in C is pragma DATA_MEM_BANK symbol constant The syntax of the pragma in C is pragma DATA_MEM_BANK constant Both global and local variables
157. a 7 20 DATA_SECTION pragma 7 22 __DATE__ macro 2 25 daylight savings time 9 22 deallocate memory function 9 62 debugging generating directives 2 15 optimized code 3 33 declarations in C language 7 4 development flow diagram 1 2 device adding 9 11 functions 9 40 diagnostic identifiers in raw listing file 2 35 Index 5 Index diagnostic messages assert function 9 44 controlling 2 31 described 9 14 description 2 29 to 2 30 errors 2 29 fatal errors 2 29 format 2 29 generating 2 31 to 2 32 other messages 2 33 remarks 2 29 suppressing 2 31 to 2 32 warnings 2 29 difftime function 9 53 direct call defined A 3 directives assembly optimizer 4 16 defined A 3 directories alternate for include files 2 26 for include files 2 16 2 26 specifying 2 21 div function 9 54 div_tdatatype 9 21 division 7 3 division functions 9 54 documentation v vi DP data page pointer 7 11 duplicate value in memory function 9 74 DWARF debugging information 2 16 dynamic memory allocation defined A 3 described 8 5 e linker option 5 6 ea shell option 2 20 ec shell option 2 20 EDOM macro 9 15 EFPOS macro 9 15 el shell option 2 20 embedded C mode 7 36 emulator defined A 3 endproc directive 4 26 ENOENT macro 9 15 Index 6 entry point defined A 3 environment information function 9 66 environment variable C_DIR 2 25 2 27 C6X_C_DIR 2 25 2 27 defined A 3 e0 shell option 2 20 EOF macro 9 20 ep shell option
158. a Call 00sec eee eee eee 8 18 8 4 2 How a Called Function Responds 060c cece eee eee eee eee 8 19 8 4 3 Accessing Arguments and Local Variables 000000 ee eee 8 21 8 5 Interfacing C and C With Assembly Language ceeeeeeee ees 8 22 8 5 1 Using Assembly Language Modules With C C Code 54 8 22 8 5 2 Using Intrinsics to Access Assembly Language Statements 8 25 8 5 3 Using Unaligned Data and 64 Bit Values 0 0 eee 8 35 8 5 4 Using MUST_ITERATE and _nassert to Enable SIMD and Expand Compiler Knowledge of Loops 060 c cece cece eee eens 8 35 8 5 5 SAT Bit Side Effects 0 eens 8 37 8 5 6 Using Inline Assembly Language 0 cece eee eee eee 8 38 8 5 7 Accessing Assembly Language Variables From C C 0005 8 39 86 Interrupt Handling hence saree ee bee Ae eae te Se te ae ee ee 8 41 8 6 1 Saving Registers During Interrupts 060 0c cece eee eee eee 8 41 8 6 2 Using C C Interrupt Routines 0 eee 8 41 8 6 3 Using Assembly Language Interrupt Routines 0 0c eee eee 8 42 8 7 Run Time Support Arithmetic Routines 0c cece eee es 8 43 8 8 System Initialization 20 0 0 nett een eens 8 45 8 8 1 Automatic Initialization of Variables 0 0 cece eee 8 46 8 8 2 Global Constructors sesse essre eeunenn 8 46 8 8 3 Initialization Tables
159. a Directives 7 7 4 The DATA_SECTION Pragma The DATA_SECTION pragma allocates space for the symbol in a section named section name The syntax of the pragma in C is pragma DATA_SECTION symbol section name The syntax of the pragma in C is pragma DATA_SECTION section name The DATA_SECTION pragma is useful if you have data objects that you want to link into an area separate from the bss section Example 7 6 demonstrates the use of the DATA_SECTION pragma Example 7 6 Using the DATA_SECTION Pragma 7 22 a C source file pragma DATA_SECTION bufferB my_sect char bufferA 512 char bufferB 512 b C source file char bufferA 512 pragma DATA_SECTION my_sect char bufferB 512 c Assembly source file global _bufferA bss _bufferA 512 4 global _bufferB _bufferB usect my_sect 512 4 Pragma Directives 7 7 5 The FUNC_CANNOT_INLINE Pragma The FUNC_CANNOT_INLINE pragma instructs the compiler that the named function cannot be expanded inline Any function named with this pragma overrides any inlining you designate in any other way such as using the inline keyword Automatic inlining is also overridden with this pragma see section 2 10 Using Inline Function Expansion on page 2 36 The pragma must appear before any declaration or reference to the function that you want to keep The syntax
160. a FUNC_NEVER_RETURNS func The syntax of the pragma in C is pragma FUNC_NEVER_RETURNS In C the argument funcis the name of the function that does not return In C the pragma applies to the next function declared 7 7 11 The FUNC_NO_GLOBAL_ASG Pragma The FUNC_NO_GLOBAL_ASG pragma specifies to the optimizer that the function makes no assignments to named global variables and contains no asm statements The pragma must appear before any declaration or reference to the function that you want to keep The syntax of the pragma in C is pragma FUNC_NO GLOBAL _ASG func The syntax of the pragma in C is pragma FUNC _NO GLOBAL_ASG In C the argument funcis the name of the function that makes no assignments In C the pragma applies to the next function declared 7 26 Pragma Directives 7 7 12 The FUNC_NO_IND_ASG Pragma The FUNC_NO_IND_ASG pragma specifies to the optimizer that the function makes no assignments through pointers and contains no asm statements The pragma must appear before any declaration or reference to the function that you want to keep The syntax of the pragma in C is pragma FUNC_NO_IND_ASG func The syntax of the pragma in C is pragma FUNC_NO _IND_ASG InC the argument funcis the name of the function that makes no assignments In C the pragma applies to the next function declared 7 7 13 The INTERRUPT P
161. a becomes a dead variable and is eliminated The sum of multiplying j by 3 plus multiplying j by 2 is simplified into b j 5 The assignments to a and b are eliminated and their values returned Optimizing Your Code 3 41 What Kind of Optimization Is Being Performed Example 3 6 Data Flow Optimizations and Expression Simplification a C source char simplify char j char a 3 char b j a 4 2 return b b Compiler output FP set A15 DP set B14 SP set BIS opt 6x 02 tl if tl opt sect text global _simplify _simplify B S2 B3 OP 2 BY M1 5 A4 A0 OP 1 EXT Foul AO 24 24 A4 BRANCH OCCURS 3 13 6 Inline Expansion of Functions 3 42 The compiler replaces calls to small functions with inline code saving the over head associated with a function call as well as providing increased opportuni ties to apply other optimizations see Example 3 7 In Example 3 7 the compiler finds the code for the C function plus and replaces the call with the code What Kind of Optimization Is Being Performed Example 3 7 Inline Function Expansion a C source int plus int x int y return x y main int a 3 int b 4 int c 5 return plus a plus b c b Compiler output FP set A15 DP set B14 SP set B15 A opt6x 03 t2 if t2 opt sect text global _main _main p gt gt gt gt gt gt gt
162. a de bugging aid that translates each mangled name it detects to its original name found in the C source code These topics tells you how to invoke and use the C name demangler The C name demangler reads in input looking for mangled names All un mangled text is copied to output unaltered All mangled names are demangled before being copied to output Topic Page 11 1 Invoking the C Name Demangler 0eeeeeeeeeees 11 2 11 2 C Name Demangler Options cece cece eee e eee 11 2 11 3 Sample Usage of the C Name Demangler 11 3 11 1 Invoking the C Name Demangler 11 1 Invoking the C Name Demangler The syntax for invoking the C name demangler is dem6x options filenames dem6x options filenames Command that invokes the C name demangler Options affect how the name demangler behaves Options can ap pear anywhere on the command line or in a linker command file Options are discussed in section 11 2 Text input files such as the assembly file output by the compiler the assembler listing file and the linker map file If no filenames are specified on the command line dem6x uses standard in By default the C name demangler outputs to standard out You can use the o file option if you want to output to a file 11 2 C Name Demangler Options The following options apply only to the C name demangler h 0 file u
163. able From C 0000 e eee ee ee eees 8 39 Accessing an Assembly Language Constant From 000 cece cence es 8 40 AMRiand SAT Handling 2 sey theeta Lea na eda naked abel 16 ote asters 8 42 Initialization Table rire raa r eis aie ae Oe ae Pa ee ee 8 48 Name Mangling eces trata aN adie tn toni dieee sara can dels sate deat se eaten 11 3 Result After Running the C Name Demangler Utility 0022 0005 11 5 Contents xvii Notes Case Sensitivity in Filename Extensions 000 e eee eee eee eens 2 18 No Default Extension for Source Files is Assume 000000 cece eect eee t ees 2 18 Specifying Path Information in Angle Brackets 2 cece eect teen eee eens 2 27 Function Inlining Can Greatly Increase Code Size 0 cece eects 2 36 RTS Library Files Are Not Built With mi Option 00000 c cece eee eee ee 2 41 Do Not Lower the Optimization Level to Control Code Size 0 eee 3 3 The on Option Applies to the Assembly Optimizer 00 000 cece eee eee 3 3 Software Pipelining Can Significantly Increase Code Size 0 06 eee 3 5 More Details on Software Pipelining Information 000 0c cece eee eens 3 5 Turning Off Redundant Loops 60 c eee nearen naeran 3 15 Turning Off Redundant Loops 6c c cece eee eee eee teens 3 17 Disabling Code Size Optimizations or Reducing the Optimization Level 3 1
164. acros are used when the number and type of arguments can vary each time a function is called J The type va_list is a pointer type that can hold information for va_start va_end and va_arg A variable argument function can use the macros declared by stdarg h cstdarg to step through its argument list at run time when the function knows the number and types of arguments actually passed to it You must ensure that a call to a variable argument function has visibility to a prototype for the function in order for the arguments to be handled correctly The variable argument functions are listed in Table 9 3 e page 9 30 Run Time Support Functions 9 19 Header Files 9 3 11 Standard Definitions sttdef h cstddef The sttdef h cstddef header defines types and macros The types are m m ptrdiff_t a signed integer type that is the data type resulting from the subtraction of two pointers size_t an unsigned integer type that is the data type of the sizeofoperator The macros are E E NULL a macro that expands to a null pointer constant 0 offsetof type identifier a macro that expands to an integer that has type size_t The result is the value of an offset in bytes to a structure member identifier from the beginning of its structure type These types and macros are used by several of the run time support functions 9 3 12 Input Output Functions stdio h cstdio 9 20 The stdio h cstdio header defines types and
165. and schedule combination re quires more than these available registers Schedule found with N iterations in parallel A software pipeline schedule was found with N iterations executing in parallel Too many reads of one register The same register can be read a maxi mum of 4 times per cycle with the C6200 or C6700 core The C6400 core can read the same register any number of times per cycle Trip variable used in loop Can t adjust trip count The loop trip counter has a use in the loop other than as a loop trip counter Optimizing Your Code 3 11 Optimizing Software Pipelining 3 2 2 3 Investigative Feedback The following messages can appear when the compiler or assembly optimizer detects that performance can be improved with the software pipeline J Loop carried dependency bound is much larger than unpartitioned resource bound There may be a potential memory alias disambiguation problem This means that there are two pointers that may or may not point to the same location and thus the compiler must assume they might This can cause a dependency often between the load of one pointer and the store of another that does not really exist For software pipelined loops this can greatly degrade performance I Two loops are generated one not software pipelined If the trip count is too low it is illegal to execute the software pipelined version of the loop In this case the compiler could not guarantee that the minimum trip
166. ar with other storage class modifiers far static int x static near int x static int far x far int foo static far int foo 7 4 4 1 Near and far data objects Global and static data objects can be accessed in the following two ways near keyword The compiler assumes that the data item can be accessed relative to the data page pointer For example LDW dp _address a0 far keyword The compiler cannot access the data item via the dp This can be required if the total amount of program data is larg er than the offset allowed 32K from the DP For example MVKL _address al MVKH _address al LDW al a0 Once a variable has been defined to be far all external references to this vari able in other C files or headers must also contain the far keyword This is also true of the near keyword However you get compiler errors when the far key word is not used everywhere Not using the near keyword everywhere only leads to slower data access times By default the compiler generates small memory model code which means that every data object is handled as if it were declared near unless itis actually declared far If an object is declared near it is loaded using relative offset addressing from the data page pointer DP which is B14 DP points to the beginning of the bss section If you use the DATA_SECTION pragma the object is indicated as a far vari able and this cannot be overridden This ensures access to the variable sinc
167. arameter minimum value The minimum number of times that the loop can iterate This is a required parameter The default is 1 maximum value The maximum number of times that the loop can iterate The maximum value is an optional parameter factor The factor used along with minimum value and maximum value to determine the number of times that the loop can iterate In the following example the loop executes some multiple of 8 between 8 and 48 times loop trip 8 48 8 A factor of 2 states that your loop always executes an even number of times allowing the compiler to unroll once this can result in a performance increase The factor is optional when the maximum value is speci fied You are not required to specify a trip directive with every loop however you should use trip if you know that a loop iterates some number of times This generally means that redundant loops are not generated unless the minimum value is really small saving code size and execution time If you Know that a loop always executes the same number of times whenever it is called define maximum value where maximum value equals minimum value as well The compiler may now be able to unroll your loop thereby increasing performance When you are compiling with the interrupt flexibility option min using a trip maximum value allows the compiler to determine the maximum number of cycles that the loop can execute Then the compiler compares that value
168. arameter to a register instead of the stack which speeds access to the parameter within the function For more information about registers see section 8 3 Register Conventions on page 8 16 The asm Statement 7 6 The asm Statement The TMS320C6000 C C compiler can embed C6000 assembly language instructions or directives directly into the assembly language output of the compiler This capability is an extension to the C C language the asm statement The asm statement provides access to hardware features that C C cannot provide The asm statement is syntactically like a call to a func tion named asm with one string constant argument asm assembler text The compiler copies the argument string directly into your output file The assembler text must be enclosed in double quotes All the usual character string escape codes retain their definitions For example you can inserta byte directive that contains quotes as follows asm STR byte abc The inserted code must be a legal assembly language statement Like all assembly language statements the line of code inside the quotes must begin with a label a blank a tab or a comment asterisk or semicolon The compiler performs no checking on the string if there is an error the assembler detects it For more information about the assembly language statements see the TMS320C6000 Assembly Language Tools User s Guide The asm statements do not follow the syntac
169. assembler Option Effete Page aa Enables absolute listing 2 22 ac Makes case significant in assembly source files 2 22 adname Sets the name symbol 2 22 ahcfilename Copies the specified file for the assembly module 2 22 ahifilename Includes the specified file for the assembly module 2 22 al Generates an assembly listing file 2 22 as Puts labels in the symbol table 2 22 auname Undefines the predefined constant name 2 22 ax Generates the cross reference file 2 22 Using the C C Compiler 2 13 Changing the Compiler s Behavior With Options Table 2 1 Shell Options Summary Continued k Options that control the linker 2 14 Options a e global_symbol f fill_value g global_symbol h heap size i directory l libraryname m filename n o name out q r S stack size u symbol W Effect Generates absolute executable output Generates relocatable executable output Disables merge of symbolic debugging information Autoinitializes variables at run time Initializes variables at loadtime Defines entry point Defines fill value Keeps a global_symbol global overrides h Makes global symbols static Sets heap size bytes Defines library search path Supplies library or command filename Names the map file Ignores all fill specifications in MEMORY directives Names the output file Suppresses progress messages quiet Generates relocatable
170. atement may only be used within a loop or switch break By default the source line is omitted Use the pdv shell option to enable the display of the source line and the error position The above example makes use of this option The message identifies the file and line involved in the diagnostic and the source line itself with the position indicated by the character follows the message If several diagnostics apply to one source line each diagnostic has the form shown the text of the source line is displayed several times with an appropriate position indicated each time Using the C C Compiler 2 29 Understanding Diagnostic Messages 2 30 Long messages are wrapped to additional lines when necessary You can use a command line option oden to request that the diagnostic s numeric identifier be included in the diagnostic message When displayed the diagnostic identifier also indicates whether the diagnostic can have its severity overridden on the command line If the severity can be overridden the diag nostic identifier includes the suffix D for discretionary otherwise no suffix is present For example Test_name c line 7 error 64 D declaration does not declare anything struct A Test_name c line 9 error 77 this declaration has no storage class or type specifier XXXXX nw Because an error is determined to be discretionary based on the error severity associated with a specific con
171. b h gt double strtod const char st char endptr long strtol const char st char endptr int base unsigned long strtoul const char st char endptr int base include lt cstdlib gt double strtod const char st char endptr long strtol const char st char endptr int base unsigned long strtoul const char st char endptr int base strtod c strtol c and strtoul c in rts src Three functions convert ASCII strings to numeric values For each function argument st points to the original string Argument endptr points to a pointer the functions set this pointer to point to the first character after the converted string The functions that convert to integers also have a third argument base which tells the function what base to interpret the string in J The strtod function converts a string to a floating point value The string must have the following format space sign digits digits e E sign integer The function returns the converted string if the original string is empty or does not have the correct format the function returns a 0 If the converted string would cause an overflow the function returns HUGE_VAL if the converted string would cause an underflow the function returns 0 If the converted string overflows or underflows errno is set to the value of ERANGE I The strtol function converts a string to along integer The string must have the following format space sign digits
172. brary function ol1 or oL1 Informs the optimizer that your file declares a stan 3 18 dard library function ol2 or oL2 Informs the optimizer that your file does not declare 3 18 or alter library functions Overrides the ol0 and ol1 options default on0 Disables the optimization information file 3 19 on1 Produces an optimization information file 3 19 on2 Produces a verbose optimization information file 3 19 op0 Specifies that the module contains functions and vari 3 21 ables that are called or modified from outside the source code provided to the compiler op1 Specifies that the module contains variables modified 3 21 from outside the source code provided to the compil er but does not use functions called from outside the source code op2 Specifies that the module contains no functions or 3 21 variables that are called or modified from outside the source code provided to the compiler default op3 Specifies that the module contains functions that are 3 21 called from outside the source code provided to the compiler but does not use variables modified from outside the source code os Interlists optimizer comments with assembly state 3 30 ments The machine specific ma mhn min msn and mt options see Table 2 1 e also effect optimization 2 12 Changing the Compiler s Behavior With Options Table 2 1 Shell Options Summary Continued i Options that control the
173. call to exit Section 8 8 3 Initialization Tables on page 8 48 discusses the format of the pinit table 5 5 4 Specifying the Type of Initialization 5 10 The C C compiler produces data tables for initializing global variables Sec tion 8 8 3 Initialization Tables on page 8 48 discusses the format of these tables These tables are in a named section called cinit The initialization tables are used in one of the following ways Global variables are initialized at run time Use the c linker option see section 8 8 4 Autoinitialization of Variables at Run Time on page 8 51 Global variables are initialized at load time Use the cr linker option see section 8 8 5 nitialization of Variables at Load time on page 8 52 When you link a C C program you must use either the c or cr linker op tion These options tell the linker to select initialization at run time or load time When you compile and link programs the c linker option is the default If used the c linker option must follow the z option See section 5 2 Invoking the Linker With the Compiler Shell on page 5 4 The following list outlines the linking conventions used with c or cr J Thesymbol_c_int00 is defined as the program entry point it identifies the beginning of the C C boot routine in boot obj When you use c or cr _c_int00 is automatically referenced ensuring that boot obj is automati cally linked in fro
174. can be aligned with the DATA_MEM_BANK pragma The DATA_MEM_BANK pragma must reside inside the function that contains the local variable being aligned The symbo can also be used as a parameter in the DATA_SECTION pragma 7 20 Pragma Directives When optimization is enabled the tools may or may not use the stack to store the values of local variables The DATA_MEM_BANK pragma allows you to align data on any data memory bank that can hold data of the symbofs type size This is useful if you need to align data in a particular way to avoid memory bank conflicts in your hand coded assembly code versus padding with zeros and having to account for the padding in your code This pragma increases the amount of space used in data memory by a small amount as padding is used to align data onto the correct bank For C6200 the code in Example 7 5 guarantees that array x begins at an ad dress ending in 4 or c in hexadecimal and that array y begins at an address ending in 0 or 8 The alignment for array y affects its stack placement Array z is placed in the z_sect section and begins at an address ending in 4 or c Example 7 5 Using the DATA_MEM_BANK Pragma pragma DATA_MEM_BANK x 2 short x 100 pragma DA pragma DA short z 100 A_MEM_ BANK z 0 A_SECTION z z_sect void main pragma DATA_MEM_BANK y 2 short y 100 TMS320C6000 C C Language Implementation 7 21 Pragm
175. cards use 2 18 write block of data function 9 65 write functions fprintf 9 61 fputc 9 61 fputs 9 61 printf 9 79 putc 9 79 putchar 9 79 puts 9 80 sprintf 9 88 ungetc 9 105 vfprintf 9 107 vprintf 9 107 vsprintf 9 108 write I O function 9 10 x linker option 5 7 z option overriding 5 5 shell 2 4 2 17 5 4 standalone simulator 6 5 Index 19 Index 20
176. cated previously will be lost do not try to access them Lee Run Time Support Functions 9 75 mktime Syntax for C Syntax for C Defined in Description Example 9 76 Convert to Calendar Time include lt time h gt time_t mktime register struct tm tptr include lt ctime h gt time_t std mktime register struct tm tptr mktime c in rts src The mktime function converts a broken down time expressed as local time into proper calendar time The tptr argument points to a structure that holds the broken down time The function ignores the original values of tm_wday and tm_yday and does not restrict the other values in the structure After successful completion of time conversions tm_wday and tm_yday are set appropriately and the other components in the structure have values within the restricted ranges The final value of tm_mday is not sent until tm_mon and tm_year are determined The return value is encoded as a value of type time_t If the calendar time cannot be represented the function returns the value 1 For more information about the functions and types that the time h header declares and defines see section 9 3 15 Time Functions time h on page 9 22 This example determines the day of the week that July 4 2001 falls on include lt time h gt static const char const wday Sunday Monday Tuesday Wednesday Thursday Friday Saturday
177. ce file Use this option Declares a function with the same name as a standard library ol0 function Contains but does not alter functions declared in the standard li ol1 brary Does not alter standard library functions but you used the ol0 ol2 or ol1 option in a command file or an environment variable The ol2 option restores the default behavior of the optimizer Performing File Level Optimization o3 Option 3 5 2 Creating an Optimization Information File onn Option When you invoke the optimizer with the o3 option you can use the on option to create an optimization information file that you can read The number following the on denotes the level 0 1 or 2 The resulting file has an nfo extension Use Table 3 3 to select the appropriate level to append to the on option Table 3 3 Selecting a Level for the on Option If you Use this option Do not want to produce an information file but you used the on1 on0 or on2 option ina command file or an environment variable The on0 option restores the default behavior of the optimizer Want to produce an optimization information file on1 Want to produce a verbose optimization information file on2 Optimizing Your Code 3 19 Performing Program Level Optimization pm and 03 Options 3 6 Performing Program Level Optimization pm and o3 Options 3 20 You can specify program level optimization by using the pm opt
178. ce in string of any char acter from chs Finds the last occurrence of character c in string expands inline except when pi is used Returns the length of the initial segment of string which is entirely made up of characters from chs Finds the first occurrence of string2 in string1 Breaks str1 into a series of tokens each delimited by a character from str2 Transforms n characters from from to to Run Time Support Functions Page 9 92 9 92 9 94 9 95 9 96 9 97 9 98 9 98 9 99 9 99 9 101 9 101 9 35 Summary of Run Time Support Functions and Macros i Time support functions time h ctime Function char asctime const struct tm timeptr clock_t clock void char ctime const time_t timer double difftime time_t time time_t time0 struct tm gmtime const time_t timer structtm localtime const time_t timer time_t mktime register struct tm tptr size_t strftime char out size_t maxsize const char format const struct tm time time_t time time_t timer 9 36 Description Converts a time to a string Determines the processor time used Converts calendar time to local time Returns the difference between two calendar times Converts local time to Greenwich Mean Time Converts time_t value to broken down time Converts broken down time to a time_t value Formats a time into a character string Returns the current calendar time Page 9 43 9 50 9 53
179. ch register as follows The c6x h include file defines all the control registers in this manner extern cregister volatile unsigned int register Once you have declared the register you can use the register name directly Note that IFR is read only See the TMS320C6000 CPU and Instruction Set Reference Guide for detailed information on the control registers See Example 7 1 for an example that declares and uses control registers Example 7 1 Define and Use Control Registers xtern cregister volatile unsigned int AMR xtern cregister volatile unsigned int CSR xtern cregister volatile unsigned int IFR xtern cregister volatile unsigned int ISR xtern cregister volatile unsigned int ICR xtern cregister volatile unsigned int IER xtern cregister volatile unsigned int FADCR xtern cregister volatile unsigned int FAUCR xtern cregister volatile unsigned int FMCR main printf AMR x n AMR TMS320C6000 C C Language Implementation 7 9 Keywords 7 4 3 The interrupt Keyword 7 10 The C6000 compiler extends the C C language by adding the interrupt key word which specifies that a function is treated as an interrupt function Functions that handle interrupts follow special register saving rules and a spe cial return sequence When C C code is interrupted the interrupt routine must preserve the contents of all machine registers that are used by the ro
180. chable err c line 12 warning 111 D statement is unreachable Next you can use the diagnostic identifier of 111 as the argument to the pdsr option to treat this warning as a remark This compilation now produces no diagnostic messages because remarks are disabled by default Although this type of control is useful it can also be extremely dangerous The compiler often emits messages that indicate a less than obvious problem Be careful to analyze all diagnostics emitted before using the suppression options Other Messages Generating Cross Reference Listing Information px Option 2 7 Other Messages Other error messages that are unrelated to the source such as incorrect com mand line syntax or inability to find specified files are usually fatal They are identified by the symbol gt gt preceding the message 2 8 Generating Cross Reference Listing Information px Option The px option generates a cross reference listing file that contains reference information for each identifier in the source file The px option is separate from ax which is an assembler rather than a shell option The cross refer ence listing file has the same name as the source file with a cr extension The information in the cross reference listing file is displayed in the following format sym id name X filename sym id name x filename line number column number line number column number An integer uniquely assig
181. char buffer no prototype provided int std Itoa long val char buffer Itoa c in rts src The Itoa function is a nonstandard non ANSI function and is provided for compatibility The standard equivalent is sprintf The function is not prototyped in rts src The ltoa function converts a long integer n to an equivalent ASCII string and writes it into the buffer If the input number val is negative a leading minus sign is output The Itoa function returns the number of characters placed in the buffer Run Time Support Functions 9 71 malloc Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C Defined in Description 9 72 Allocate Memory include lt stdlib h gt void malloc size_t size include lt stdlib h gt void std malloc size_t size memory c in rts src The malloc function allocates space for an object of size bytes and returns a pointer to the space If malloc cannot allocate the packet that is if it runs out of memory it returns a null pointer 0 This function does not modify the memory it allocates The memory that malloc uses is in a special memory pool or heap The con stant ___SYSMEM_SIZE defines the size of the heap as 2K bytes You can change this amount at link time by invoking the linker with the heap option and specifying the desired size of the heap in bytes directly after the option For more information see section 8 1 3 Dynamic Memory Alloca
182. clude lt cstdlib gt int std scanf const char _fmt fscanf c in rts src The scanf function reads from the stream from the standard input device The string pointed to by _fmt describes how to read the stream Specify Buffer for Stream include lt stdlib h gt void setbuf register FILE _fp char _buf include lt cstdlib gt void std setbuf register FILE _fp char _buf setbuf c in rts src The setbuf function specifies the buffer used by the stream pointed to by _ fp If buf is set to null buffering is turned off No value is returned setjmp longjmp Syntax for C Syntax for C Defined in Description setjmp longjmp Nonlocal Jumps include lt setjmp h gt int setjmp jmp_buf env void longjmp jmp_buf env int _val include lt csetimp gt int std setjmp jmp_buf env void std longjmp jmp_buf env int _ val setjmp asm in rts src The setimp h header defines a type and a macro and declares a function for bypassing the normal function call and return discipline m The jmp_buf type is an array type suitable for holding the information needed to restore a calling environment The setjmp macro saves its calling environment in the jmp_buf argument for later use by the longjmp function If the return is from a direct invocation the setjmp macro returns the value O If the return is from a call to the longjmp function the setjmp macro re turns a nonzero value The longjmp
183. corresponding posi unsigned src2 tion in the return value Values can be i 16 bit signed or 8 bit unsigned int _min2 int src7 int src2 MIN2 unsigned _minu4 unsigned src7 MINU4 unsigned src2 ushort amp _mem2 void ptr LDB LDB Allows unaligned loads and stores of C6400 STB STB 2 bytes to memory uint amp _mem4 void ptr LDNW Allows unaligned loads and stores of C6400 STNW 4 bytes to memory T Instructions not specified with a device apply to all C6000 devices See the 7ms320C6000 Programmer s Guide for more information See section 8 5 3 Using Unaligned Data and 64 Bit Values for details on manipulating 8 byte data quantities Run Time Environment 8 29 Interfacing C and C With Assembly Language Table 8 3 TMS320C6000 C C Compiler Intrinsics Continued Assembly C C Compiler Intrinsic Instruction Description Devicet double amp _memd8 void ptr LDNDW Allows unaligned loads and stores of C6400 STNDW 8 bytes to memory const ushort amp _mem2_const const LDB LDB Allows unaligned loads and stores of C6400 void pin 2 bytes to memory const uint amp _mem4_const const LDNW Allows unaligned loads and stores of C6400 void ptn 4 bytes to memory const double amp __memd8_const const LDNDW Allows unaligned loads and stores of C6400 void ptr 8 bytes to memoryt int_mpy int src7 int src2 MPY Multiplies the 16 LSBs of src1 by the i 16 LSBs of src2 and returns the result
184. count would be high enough to always safely execute the pipelined version Hence it generated a non pipelined version as well Code is generated so that at run time the appropriate version of the loop will be executed J Uneven resources If the number of resources to do a particular opera tion is odd unrolling the loop can be beneficial If a loop requires 3 multi plies then a minimum iteration interval of 2 cycles is required to execute this If the loop was unrolled 6 multiplies could be evenly partitioned across the A and B side having a minimum ii of 3 cycles giving improved performance J Larger outer loop overhead in nested loop In cases where the inner loop count of a nested loop is relatively small the time to execute the outer loop can start to become a large percentage of the total execution time For cases where this significantly degrades overall loop performance un rolling the inner loop may be desired Lj There are memory bank conflicts In cases where the compiler gener ates two memory accesses in one cycle and those accesses are either 8 bytes apart on a C620x device 16 bytes apart on a C670x device or 32 bytes apart on a C640x device andboth accesses reside within the same memory block a memory bank stall will occur Memory bank conflicts can be completely avoided by either placing the two accesses in different memory blocks or by writing linear assembly and using the mptr directive to control memory ba
185. cproc and endproc directive pair Here is an example in which mdep is used to indicate a dependence between two memory references mdep idl stl LDW xpl ldl inpl j name memory reference 1d1 other code sas STW outp2 p2 stl name memory reference st1 Syntax Description Avoid Memory Bank Conflicts mptr mptr register symbol base offset stride The mptr directive associates a register with the information that allows the assembly optimizer to determine automatically whether two memory opera tions have a memory bank conflict If the assembly optimizer determines that two memory operations have a memory bank conflict then it does not sche dule them in parallel A memory bank conflict occurs when two accesses to a single memory bank in a given cycle result ina memory stall that halts all pipeline operation for one cycle while the second value is read from memory For more information on memory bank conflicts including how to use the mptr directive to prevent them see section 4 5 on page 4 34 Following are descriptions of the mptr directive parameters registersymbol The name of the register or the symbol used to name a specific memory reference base A symbol that associates related memory accesses offset The offset in bytes from the starting base symbol The offset is an optional parameter and defaults to 0 stride The register loop increment in bytes The stride is
186. cters represents the first iteration one char acter represents the second iteration and so on 4 14 What You Need to Know to Write Linear Assembly Example 4 7 shows code for a function called Lmac that contains comments Example 4 7 Lmac Function Code Showing Comments Lmac Ccproc A4 B4 reg tty prins Arsi MVK 100 i ZERO sh ZERO sl loop trip 100 LDH vali xad t0 t0 alfi LDH 2 b tl tl b i MPY t0 tl p 7p prod 0 t1 ADD p sh sl sh sl sum prod i ADD ae eral poset i B loop if i goto loop return sh sl endproc Using the Assembly Optimizer 4 15 Assembly Optimizer Directives 4 4 Assembly Optimizer Directives Assembly optimizer directives supply data for and control the assembly opti mization process The assembly optimizer optimizes linear assembly code that is contained within procedures that is code within the proc and endproc directives or within the cproc and endproc directives If you do not use these directives in your linear assembly file your code will not be optimized by the assembly optimizer This section describes these directives and others that you can use with the assembly optimizer Table 4 1 summarizes the assembly optimizer directives It provides the syn tax for each directive a description of each directive any restrictions that you should keep in mind and a page reference for more detail Table 4 1 Assembly Optimizer D
187. d If src is shorter than n characters strncpy appends null characters to dest so that dest contains n characters The function returns the value of dest Example Note that strb contains a leading space to make it five characters long Also note that the first five characters of strc are an a space the word am and another space so that after the second execution of strncpy stra begins with the phrase am followed by two spaces In the comments the notation 0 rep resents the null character char stra 100 char strb 100 he is char strc 100 I am the one father warned you of char strd 100 oops int length 5 she is the one mother warned you of ds strncpy stra strb length stra gt he is the one mother warned you of 0 strb gt he is 0 strce gt I am the one father warned you of 0 RLG strd gt oops 0 strncpy stra strc length stra gt I am the one mother warned you of 0 strb gt he is 0 xi strc gt I am the one father warned you of 0 fj strd gt oops 0 ba strncpy stra strd length stra gt oops 0 w e strb gt he is 0 ca strc gt I am the one father warned you of 0 a strd gt oops 0 a Run Time Support Functions 9 97 strpbrk Syntax for C Syntax for C Defined in Description Example Syntax for C Syntax
188. d regardless of the optimization level These optimizations cannot be turned off So OO eet Note Do Not Lower the Optimization Level to Control Code Size When trying to reduce code size do not lower the level of optimization Instead use the ms option to control the code size performance tradeoff Higher o levels combined with high ms levels generally result in the small est code size For more information see section 3 4 Reducing Code Size ms Option on page 3 17 a ccs Note The on Option Applies to the Assembly Optimizer The on option should also be used with the assembly optimizer Although the assembly optimizer does not perform all the optimizations described here key optimizations such as software pipelining and loop unrolling require the o option to be specified a EEEE Optimizing Your Code 3 3 Optimizing Software Pipelining 3 2 Optimizing Software Pipelining Software pipelining is a technique used to schedule instructions from a loop so that multiple iterations of the loop execute in parallel The compiler always attempts to software pipeline In general code size and performance are bet ter when you use the o2 or 03 option See section 3 1 Invoking Optimiza tion You should also use the ms option to reduce code size Figure 3 2 illustrates a software pipelined loop The stages of the loop are rep resented by A B C D and E In this figure a maximum of five it
189. darts Lj The ldiv function performs long integer division The input arguments are long integers the function returns the quotient and the remainder in a structure of type Idiv_t The structure is defined as follows typedef struct long int quot quotient aA long int rem remainder Ff ldiv_t The sign of the quotient is negative if either but not both of the operands is negative The sign of the remainder is the same as the sign of the dividend Syntax for C Syntax for C Defined in Description exp expf Syntax for C Syntax for C Defined in Description Example exp expf Normal Termination include lt stdlib h gt void exit int status include lt cstdlib gt void std exit int status exit c in rts src The exit function terminates a program normally All functions registered by the atexit function are called in reverse order of their registration The exit function can accept EXIT_FAILURE as a value See the abort function on page 9 37 You can modify the exit function to perform application specific shut down tasks The unmodified function simply runs in an infinite loop until the system is reset The exit function cannot return to its caller Exponential include lt math h gt double exp double x float expf float x include lt cmath gt double std exp double x float std expf float x exp c and expf c in rts src The exp and expf functions return the
190. dd register contains the sign bit the exponent and the most significant part of the mantissa The even register contains the least significant part of the mantissa The A4 register is used with A5 for passing the first argument if the first argument is a double long or long double The same is true for B4 and B5 for the second parameter and so on For more information about argu ment passing registers and return registers see section 8 4 Function Struc ture and Calling Conventions Table 8 2 Register Usage Register AO Al A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 Function Preserved By Parent Parent Parent Parent Parent Parent Parent Parent Parent Parent Child Child Child Child Child Child Special Uses Structure register pointer to a returned structure Argument 1 or return value Argument 1 or return value with A4 for doubles and longs Argument 3 Argument 3 with A6 for doubles and longs Argument 5 Argument 5 with A8 for doubles and longs Argument 7 Argument 7 with A10 for doubles and longs Argument 9 Argument 9 with A12 for doubles and longs Frame pointer FP Register BO B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 B11 B12 B13 B14 B15 Function Preserved By Parent Parent Parent Parent Parent Parent Parent Parent Parent Parent Child Child Child Child Child Child
191. e mt option g int j int a 20 f amp a amp a Bad f amp at42 amp a j Also Bad f int ptrl int ptr2 Indicating Whether Certain Aliasing Techniques Are Used LJ The mt option indicates that each subscript expression in an array reference A E1 En evaluates to a nonnegative value that is less than the corresponding declared array bound Do notuse mt if you have code similar to the following example static int ary 20 20 int g return 5 4 4 is a negative index return 0 96 96 exceeds 20 as an index return 4 16 This one is OK int fant ip int J return ary i j In this example ary 5 4 ary 0 96 and ary 4 16 access the same memory location Only the reference ary 4 16 is acceptable with the mt option because both of its indices are within the bounds 0 19 IJ The mt option indicates that loop invariant counter increments and decrements of loop counters are non zero Loop invariant means a value of an expression doesn t change within the loop If your code does not contain any of the aliasing techniques described above you should use the mt option to improve the optimization of your code How ever you must use discretion with the mt option unexpected results may oc cur if these aliasing techniques appear in your code and the mt option is used 3 7 3 Using the mt Option With the Assembly
192. e However overcollapsing can have a negative performance impact Thus by default the compiler attempts to collapse as many stages as possible without sacrificing performance When ms0O ms1 options are invoked the compiler increasingly favors code size over performance 3 2 3 1 Speculative Execution When prologs and epilogs are collapsed instructions might be speculatively executed thereby causing loads to addresses beyond either end of the range explicitly read within the loop By default the compiler cannot speculate loads because this could cause an illegal memory location to be read Sometimes the compiler can predicate these loads to prevent over execution However this can increase register pressure and might decrease the total amount col lapsing which can be performed When the mhn option is used the speculative threshold is increased from the default of 0 to n When the threshold is n the compiler can allow a load to be speculatively executed as the memory location it reads will be no more than nbytes before or after some location explicitly read within the loop If the nis omitted the compiler assumes the speculative threshold is unlimited To spec ify this in Code Composer Studio select the Speculate Threshold check box and leave the text box blank in the Build Options dialog box on the Compiler tab Advanced category Collapsing can usually reduce the minimum safe trip count If the minimum known trip count is less
193. e number SPRU189 describes the C6000 CPU architecture instruction set pipeline and interrupts for these digital signal processors TMS320C6000 Peripherals Reference Guide literature number SPRU190 describes common peripherals available on the TMS320C6000 digital signal processors This book includes information on the internal data and program memories the external memory interface EMIF the host port interface HPI multichannel buffered serial ports McBSPs direct memory access DMA enhanced DMA EDMA expansion bus clock ing and phase locked loop PLL and the power down modes TMS320C6000 Technical Brief literature number SPRU197 gives an introduction to the C6000 platform of digital signal processors develop ment tools and third party support Read This First V Related Documentation Trademarks Related Documentation Trademarks vi You can use the following books to supplement this user s guide American National Standard for Information Systems Programming Language C X3 159 1989 American National Standards Institute ANSI standard for C Working Paper for Draft Proposed International Standard for Information Systems Programming Language C X3J16 WG21 American National Standards Institute C A Reference Manual fourth edition by Samuel P Harbison and Guy L Steele Jr published by Prentice Hall Englewood Cliffs New Jersey Programming in C Steve G Kochan Hayden Book Company P
194. e the variable might not be in the bss section For details see section 7 7 4 DATA_SECTION pragma on page 7 22 TMS320C6000 C C Language Implementation 7 11 Keywords Note Defining Global Variables in Assembly Code If you also define a global variable in assembly code with the usect directive where the variable is not assigned in the bss section and you want to refer ence that variable in C code you must declar the variable as extern far This ensures the compiler does nottry to generate an illegal access of the variable by way of the data page pointer 7 4 4 2 Near and far function calls Function calls can be invoked in one of two ways near keyword The compiler assumes that destination of the call is within 1 M word of the caller Here the compiler uses the PC relative branch instruction B _func far keyword The compiler is told by the user that the call is not within 1M word MVKL _func al MVKH _func al B al By default the compiler generates small memory model code which means that every function call is handled as if it were declared near unless it is actually declared far 7 4 4 3 Controlling How Run Time Support Functions Are Called mr Option 7 12 The mrn option controls how run time support functions are called mr0 Run time support data and calls are near mr1 Run time support data and calls are far By default run time support functions are called with the same convention as
195. e Used Aliasing occurs when you can access a single object in more than one way such as when two pointers point to the same object or when a pointer points to a named object Aliasing can disrupt optimization because any indirect reference can refer to another object The optimizer analyzes the code to de termine where aliasing can and cannot occur then optimizes as much as pos sible while preserving the correctness of the program The optimizer behaves conservatively The following sections describe some aliasing techniques that may be used in your code These techniques are valid according to the ANSI C standard and are accepted by the C6000 compiler however they prevent the optimizer from fully optimizing your code 3 7 1 Use the ma Option When Certain Aliases are Used The optimizer assumes that any variable whose address is passed as an argument to a function is not subsequently modified by an alias set up in the called function Examples include _j Returning the address from a function _j Assigning the address to a global variable If you use aliases like this in your code you must use the ma option when you are optimizing your code For example if your code is similar to this use the ma option int glob ptr g int x 1 int p f amp x p 5 p aliases x glob_ptr 10 glob_ptr aliases x h x int f int arg glob_ptr arg return arg Optimizing Your Code 3 25 Indica
196. e compiler assumes nothing about the types of memory available about any locations not available for code or data holes or about any locations reserved for I O or control purposes The compiler produces relocatable code that allows the linker to allocate code and data into the appropriate memory spaces For example you can use the linker to allocate global variables into on chip RAM or to allocate executable code into external ROM You can allocate each block of code or data individually into memory but this is not a general practice an exception to this is memory mapped I O although you can access physical memory locations with C C pointer types 8 1 1 Sections Memory Model The compiler produces relocatable blocks of code and data called sections The sections are allocated into memory in a variety of ways to conform to a variety of system configurations For more information about sections and allo cating them see the introductory COFF information in the TMS320C6000 Assembly Language Tools User s Guide The C6000 compiler creates the following sections J initialized sections contain data or executable code The C C compil er creates the following initialized sections The cinit section contains tables for initializing variables and con stants The const section contains string literals floating point constants and data defined with the C C qualifier const provided the constant is not also defined as volat
197. e critical areas from your C C code and rewrite the code in linear assembly You can use the assembly optimizer to optimize this code When you are writing your first pass of linear assembly you should not be concerned with the pipeline structure or with assigning registers Later when you are refining your linear assembly code you might want to add more details to your code such as which functional unit to use Improving performance in this stage takes more time than in phase 2 so try to refine your code as much as possible before using phase 3 Then you should have smaller sections of code to work on in this phase Using the Assembly Optimizer 4 3 About the Assembly Optimizer What You Need to Know to Write Linear Assembly 4 2 About the Assembly Optimizer If you are not satisfied with the performance of your C C code after you have used all of the C C optimizations that are available you can use the assem bly optimizer to make it easier to write assembly code for the C6000 The assembly optimizer performs several tasks including the following J Schedules instructions to maximize performance using the instruction level parallelism of the C6000 Li Ensures that the instructions conform to the C6000 latency requirements g Allocates registers for your source code Like the C C compiler the assembly optimizer performs software pipelining Software pipelining is a technique used to schedule instructions from a loop
198. e std log double x float std logf float x log c and logf c in rts src The log and logf functions return the natural logarithm of a real number x A domain error occurs if x is negative a range error occurs if x is 0 float x y xX 2 718282 y logf x y approx 1 0 Common Logarithm include lt math h gt double log10 double x float log10f float x include lt cmath gt double std log10 double x float std log10f float x log10 c and log10f c in rts src The log10 and log10f functions return the base 10 logarithm of a real number x A domain error occurs if x is negative a range error occurs if x is 0 float x y x 10 0 y logl0f x y approx 1 0 log2 log2f Syntax for C Syntax for C Defined in Description Example Syntax for C Syntax for C Defined in Description itoa Base 2 Logarithm define _TI ENHANCED_MATH_H 1 include lt math h gt double log2 double x float log2f float x define TlENHANCED_MATH_H 1 include lt cmath gt double std log2 double x float std log2f float x log2 c and log2f c in rts src The log2 and log2f functions return the base 2 logarithm of a real number x A domain error occurs if x is negative a range error occurs if x is 0 float x y X 29 08 y log2 x y approx 1 0 See setimp longjmp on page 9 85 Convert Long Integer to ASCII no prototype provided int Itoa long val
199. e value of n the more effort the compiler invests in optimiz ing your code However you might still need to tell the compiler what your opti mization priorities are By default when o2 or o3 is specified the compiler optimizes primarily for performance Under lower optimization levels the priorities are compilation time and debugging ease You can adjust the priorities between performance and code size by using the code size flag msn The ms0 ms1 ms2 and ms3 options increasingly favor code size over performance It is recommended that a code size flag not be used with the most perfor mance critical code Using ms0 or ms1 is recommended for all but the most performance critical code Using ms2 or ms3 is recommended for seldom executed code Either ms2 or ms3 should be used also if you need the mini mum code size In all cases it is generally recommended that the code size flags be combined with o2 or 03 las a A ee eee ee oS a Note Disabling Code Size Optimizations or Reducing the Optimiza tion Level If you reduce optimization and or do not use code size flags you are disab ling code size optimizations and sacrificing performance a Optimizing Your Code 3 17 Performing File Level Optimization 03 Option 3 5 Performing File Level Optimization o3 Option The 03 option instructs the compiler to perform file level optimization You can use the 03 option alo
200. eater as required by the compiler The alignment must be a power of 2 The type must be a type or a typedef name If a type it must be either a structure tag or a union tag If a typedef its base type must be either a structure tag or a union tag Since ANSI C declares that a typedef is simply an alias for a type i e a struct this pragma can be applied to the struct the typedef of the struct or any type def derived from them and affects all aliases of the base type This example aligns any st_tag structure variables on a page boundary typedef struct st_tag int a short b st_typedef pragma STRUCT_ALIGN st_tag 128 Any use of STRUCT_ALIGN with a basic type int short float or a variable results in an error Pragma Directives 7 7 18 The UNROLL Pragma The UNROLL pragma specifies to the compiler how many times a loop should be unrolled The UNROLL pragma is useful for helping the compiler utilize SIMD instructions on the C6400 family It is also useful in cases where better utilization of software pipeline resources are needed over a non unrolled loop The optimizer must be invoked use 01 02 or 03 in order for pragma spe cified loop unrolling to take place The compiler has the option of ignoring this pragma No statements are allowed between the UNROLL pragma and the for while or do while loop to which it applies However other pragmas such as MUST_ITERATE and PROB_ITERATE may appear be
201. ed as their individual types require Members are stored as their individual types require Bits 0 31 of register Components stored as their individual types require Memory Storage 8 bits 8 bits 16 bits 16 bits 32 bits 32 bits 32 bits 32 bits 64 bits aligned to 64 bit boundary 64 bits aligned to 64 bit boundary 64 bits aligned to 64 bit boundary 64 bits aligned to 64 bit boundary Multiple of 8 bits aligned to 8 bit boundary members are stored as their individual types require Members are stored as their individual types require aligned to 32 bit bound ary 32 bits aligned to 32 bit boundary 64 bits aligned to 32 bit boundary Object Representation 8 2 1 1 char and short Data Types signed and unsigned The char and unsigned char data types are stored in memory as a single byte and are loaded to and stored from bits 0 7 of a register see Figure 8 1 Objects defined as short or unsigned short are stored in memory as two bytes and are loaded to and stored from bits 0 15 of a register see Figure 8 1 In big endian mode 2 byte objects are loaded to registers by moving the first byte that is the lower address of memory to bits 8 15 of the register and mov ing the second byte of memory to bits 0 7 In little endian mode 2 byte objects are loaded to registers by moving the first byte that is the lower address of memory to bits 0 7 of the register and moving the second byte of memory to bits
202. ed constant name This option over rides any d options for the specified constant Runs the linker on the specified object files The z option and its parameters follow all other options on the command line All arguments that follow z are passed to the linker For more information see section 5 1 Invoking the Linker as an Individual Program on page 5 2 Using the C C Compiler 2 17 Changing the Compiler s Behavior With Options 2 3 2 Specifying Filenames The input files that you specify on the commandline can be C source files C source files assembly source files linear assembly files or object files The shell uses filename extensions to determine the file type Extension File Type C C source C Depends on operating system Cpp CXX CC C source sa Linear assembly asm abs or s extension begins with s Assembly source obj Object TS Note Case Sensitivity in Filename Extensions Case sensitivity in filename extensions is determined by your operating sys tem If your operating system is not case sensitive a file with a C extension is interpreted as a C file If your operating system is case sensitive a file with a C extension is interpreted as a C file The conventions for filename extensions allow you to compile C and C files and optimize and assemble assembly files with a single command For information about how you can alter the way that the shell interprets indi vidua
203. ed to a 2 byte boundary If the largest type in a nested structure is of type long unsigned long double or long double then the nested structure is aligned to an 8 byte boundary Structures always reserve memory in multiples of the size of the largest element type For example if a struture contains an int unsigned int or float a multiple of 4 bytes of storage is reserved in memory Members of structures are stored in the same manner as if they were individual objects Arrays are aligned on a boundary required by their element type Elements of arrays are stored in the same manner as if they were individual objects Object Representation 8 2 1 6 Pointer to Data Member Types Pointer to data member objects are stored in memory like an unsigned int 32 bit integral type Its value is the byte offset to the data member in the class plus 1 The zero value is reserved to represent the NULL pointer to the data member 8 2 1 7 Pointer to Member Function Types Pointer to member function objects are stored as a structure with three mem bers struct short int d short int i union void f O7 long 0 j The parameter d is the offset to be added to the beginning of the class object for this pointer The parameter i is the index into the virtual function table offset by 1 The index enables the NULL pointer to be represented Its value is 1 if the function is nonvirtual The parameter f is the pointer to the member
204. edundant loops are generated when the TMS320C6000 tools cannot guarantee that the trip count is large enough to pipeline a loop for maximum performance relocation A process in which the linker adjusts all the references to a symbol when the symbol s address changes run time environment The run time parameters in which your program must function These parameters are defined by the memory and regis ter conventions stack organization function call conventions and sys tem initialization Glossary A 7 Glossary A 8 run time support functions Standard ANSI functions that perform tasks that are not part of the C language such as memory allocation string conversion and string searches run time support library A library file rts src that contains the source for the run time support functions section A relocatable block of code or data that will ultimately be contiguous with other sections in the memory map section header A portion of a COFF object file that contains information about a section in the file Each section has its own header The header points to the section s starting address contains the section s size etc shell program A utility that lets you compile assemble and optionally link inone step The shell runs one or more source modules through the com piler including the parser optimizer and code generator the assem bler and the linker software pipelining A technique used by the C C
205. eg tmp no_mdep mdep 2p El LOOP trip 100 LDW srctt rl tmp STW tmp dstt r2 cnt SUB Cnt dy cnt cnt B LOOP endproc ra Note Memory Dependence Bank Conflict Do not confuse the topic of memory alias disambiguation with the handling of memory bank conflicts They may seem similar because they each deal with memory references and the effect of those memory references on the instruction schedule Alias disambiguation is a correctness issue bank con flicts are a performance issue A memory dependence has a much broader impact on the instruction schedule than a bank conflict It is best to keep these two topics separate Lee Using the Assembly Optimizer 4 47 4 48 Chapter 5 Linking C C Code The C C compiler and assembly language tools provide two methods for linking your programs _j You can compile individual modules and link them together This method is especially useful when you have multiple source files Lj You can compile and link in one step by using cl6x This method is useful when you have a single source module This chapter describes how to invoke the linker with each method It also discusses special requirements of linking C C code including the run time support libraries specifying the type of initialization and allocating the program into memory For a complete description of the linker see the TMS320C6000 Asse
206. egins running the C C boot routine copies data from the tables pointed to by cinit into the specified variables in the bss section This allows initializa tion data to be stored in ROM and copied to RAM each time the program starts Figure 8 9 illustrates autoinitialization at run time Use this method in any sys tem where your application runs from code burned into ROM Figure 8 9 Autoinitialization at Run Time 8 50 Object file Memory init Initialization ROM bss section RAM System Initialization 8 8 5 Initialization of Variables at Load Time Initialization of variables at load time enhances performance by reducing boot time and by saving the memory used by the initialization tables To use this method invoke the linker with the cr option When you use the cr linker option the linker sets the STYP_COPY bit in the cinit section s header This tells the loader not to load the cinit section into memory The cinit section occupies no space in the memory map The linker also sets the cinit symbol to 1 normally cinit points to the beginning of the initialization tables This indicates to the boot routine that the initialization tables are not present in memory accordingly no run time initialization is per formed at boot time A loader which is not part of the compiler package must be able to perform the following tasks to use initialization at load time _j Detect the presence of t
207. egister canbe a symbolic or machine register The call directive adheres to the same register and function calling conventions as the C C compiler For information see section 8 3 Register Conventions on page 8 16 and section 8 4 Function Structure and Calling Conventions on page 8 18 There is no support for alternative register or func tion calling conventions You cannot call a function that has a variable number of arguments such as printf No error checking is performed to ensure the correct number and or type of arguments is passed You cannot pass or return structures through the call directive Following is a description of the call directive parameters ret_reg Optional Symbolic machine register that is assigned the result of the call If not specified the assembly optimizer presumes the call overwrites the registers A5 and A4 with a result func_name_ The name of the function to call or the name of the symbolic machine register for indirect calls A register pair is not allowed The label of the called function must be defined in the file If the code for the function is not in the file the label must be defined with the global or def directive If you are calling a C C func tion you must use the appropriate linkname of that function See section 7 8 Generating Linknames on page 7 32 for more information arguments Optional Symbolic machine registers passed as an argument The arguments are passed in this
208. egister targeting 3 44 register tracking 3 44 Index optimizations continued register variables 3 44 strength reduction 3 43 optimized code debugging 3 33 profiling 3 33 optimizer defined A 6 described 1 3 invoking with shell options 3 2 summary of options 2 12 options assembler 2 22 C name demangler 11 2 compiler shell summary 2 7 conventions 2 6 defined A 6 diagnostics 2 11 2 31 library build utility 10 4 to 10 6 linker 5 6 to 5 7 preprocessor 2 10 2 27 to 2 28 standalone simulator 6 4 output file options summary 2 9 module defined A 6 overview of files 1 6 section defined A 6 suppression 2 17 packed data optimization concerns 2 42 parser defined A 7 summary of options 2 10 partitioning defined A 7 pdel shell option 2 31 pden shell option 2 31 pdr shell option 2 31 pds shell option 2 31 pdse shell option 2 31 pdsr shell option 2 31 pdsw shell option 2 31 pdv shell option 2 32 pdw shell option 2 32 pe shell option 7 36 perror function 9 77 pi shell option 2 37 Index 13 Index pipelined loop epilog defined A 7 described 3 4 pipelined loop prolog defined A 7 described 3 4 pk parser option 7 34 7 36 placing run time support off chip controlling function calls 7 12 pm shell option 3 20 pointer combinations 7 35 pop defined A 7 position file indicator function 9 83 position independent data 8 7 pow function 9 78 power functions 9
209. ell Option dname def g uname Effect Predefines name Enables symbolic debugging Undefines name b Options that are machine specific Option ma mb mhn min mlin mrn msn Effect Assumes aliased variables Compiles C6400 code compatible with array alignment restrictions of version 4 0 tools or C6200 C6700 object code Produces object code in big endian format Allows speculative execution Specifies an interrupt threshold value Changes near and far assumptions on four levels ml0 ml1 ml2 and ml3 Turns on function subsections Makes calls to run time support functions near mr0 or far mr1 Controls code size on four levels msO ms1 ms2 and ms3 Indicates that specific aliasing techniques are notused Turns off software pipelining Selects target version Library Build Utility Page 2 15 2 15 2 17 Page 3 25 2 42 2 16 3 13 2 44 2 16 5 14 2 16 3 17 3 26 3 5 3 15 10 5 Options Summary Table 10 1 Summary of Options and Their Effects Continued 10 6 c Options that control the parser Option Effect pi Disables definition controlled inlining but o3 opti mizations still perform automatic inlining pk Makes code K amp R compatible pr Enables relaxed mode ignores strict ANSI violations ps Enables strict ANSI mode for C C not K amp R C d Parser options that control dia
210. emory pool heap and using the functions to allocate memory from the heap emulator A hardware development system that duplicates the TMS320C6000 operation entry point A point in target memory where execution starts environment variable A system symbol that you define and assign to a string Environmental variables are often included in batch files for ex ample cshrc epilog The portion of code in a function that restores the stack and returns See also pipelined loop epilog executable module A linked object file that can be executed in a target sys tem expression A constant a symbol or a series of constants and symbols separated by arithmetic operators external symbol A symbol that is used in the current program module but defined or declared in a different program module Glossary A 3 Glossary A 4 file level optimization A level of optimization where the compiler uses the information that it has about the entire file to optimize your code as op posed to program level optimization where the compiler uses informa tion that it has about the entire program to optimize your code function inlining The process of inserting code for a function at the point of call This saves the overhead of a function call and allows the optimizer to optimize the function in the context of the surrounding code global symbol A symbol that is either defined in the current module and accessed in another or accessed in t
211. en one of the input files has a sa extension assignment statement A statement that initializes a variable with a value A 1 Glossary A 2 autoinitialization The process of initializing global C variables contained in the cinit section before program execution begins autoinitialization at run time An autoinitialization method used by the linker when linking C code The linker uses this method when you invoke the linker with the c option The linker loads the cinit section of data ta bles into memory and variables are initialized at run time big endian An addressing protocol in which bytes are numbered from left to right within a word More significant bytes in a word have lower numbered addresses Endian ordering is hardware specific and is deter mined at reset See also little endian block A set of statements that are grouped together within braces and treated as an entity bss section One of the default COFF sections You use the bss directive to reserve a specified amount of space in the memory map that you can use later for storing data The bss section is uninitialized byte Per ANSI C the smallest addressable unit that can hold a character C C compiler A software program that translates C source statements into assembly language source statements C C optimizer See optimizer code generator A compiler tool that takes the file produced by the parser or the optimizer and produces an assembly
212. ent Tools Overview J You can use the library build utility to build your own customized run time support library see Chapter 10 Library Build Utility Standard run time support library functions for C and C are provided as source code in rts src The object code for the run time support functions is compiled for little endian mode versus big endian mode into standard libraries as follows E For little endian C and C code rts6200 lib rts6400 lib and rts6700 lib mM For big endian C and C code rts6200e lib rts6400e lib and rts6700e lib The run time support libraries contain the ANSI standard run time sup port functions compiler utility functions floating point arithmetic func tions and C I O functions that are supported by the C6000 compiler See Chapter 8 Run Time Environment The hex conversion utility converts a COFF object file into Tl Tagged ASCll hex Intel Motorola S or Tektronix object format You can down load the converted file to an EPROM programmer The TMS320C6000 Assembly Language Tools User s Guide explains how to use the hex con version utility The cross reference lister uses object files to produce a cross reference listing showing symbols their definitions and their references in the linked source files The TMS320C6000 Assembly Language Tools User s Guide explains how to use the cross reference utility The main product of this development process is a module that can be executed in
213. entifiers Identifier Definition N Normal line of source X Expanded line of source It appears immediately following the normal line of source if nontrivial preprocessing occurs Skipped source line false if clause L Change in source position given in the following format L line number filename key Where line numberis the line number in the source file The key is pres ent only when the change is due to entry exit of an include file Possible values of key are as follows 1 entry into an include file 2 exit from an include file 2 34 Generating a Raw Listing File pl Option The pl option also includes as defined in Table 2 4 Table 2 4 Raw Listing File Diagnostic Identifiers Diagnostic identifier Definition E Error F Fatal R Remark W Warning Diagnostic raw listing information is displayed in the following format S filename line number column number diagnostic S One of the identifiers in Table 2 4 that indicates the se verity of the diagnostic filename The source file line number The line number in the source file column number The column number in the source file diagnostic The message text for the diagnostic Diagnostics after the end of file are indicated as the last line of the file with a column number of 0 When diagnostic message text requires more than one line each subsequent line contains the same file line and column information but uses a lowercase version of the diagnost
214. ep the following in mind when using the asm statement _j Be extremely careful not to disrupt the C C environment The compiler does not check or analyze the inserted instructions Lj Avoid inserting jumps or labels into C C code because they can pro duce unpredictable results by confusing the register tracking algorithms that the code generator uses 1 Do not change the value of a C C variable when using an asm state ment _j Donotuse the asm statementto insert assembler directives that change the assembly environment j Avoid creating assembly macros in C code and compiling with the g debug option The C environment s debug information and the assem bly macro expansion are not compatible ee Interfacing C and C With Assembly Language 8 5 7 Accessing Assembly Language Variables From C C It is sometimes useful for a C C program to access variables or constants defined in assembly language There are several methods that you can use to accomplish this depending on where and how the item is defined a variable defined in the bss section a variable not defined in the bss section or a constant 8 5 7 1 Accessing Assembly Language Global Variables Accessing uninitialized variables from the bss section or a section named with usect is straightforward 1 Use the bss or usect directive to define the variable 2 When you use usect the variable is defined in a section other than bss and th
215. er Type Range Limits limits h climits Macro Value Description CHAR_BIT 8 Number of bits in type char SCHAR_MIN 128 Minimum value for a signed char SCHAR_MAX 127 Maximum value for a signed char UCHAR_MAX 255 Maximum value for an unsigned char CHAR_MIN SCHAR_MIN Minimum value for a char CHAR_MAX SCHAR_MAX Maximum value for a char SHRT_MIN 32 768 Minimum value for a short int SHRT_MAX 32 767 Maximum value for a short int USHRT_MAX 65535 Maximum value for an unsigned short int INT_MIN INT_MAX 1 Minimum value for an int INT_MAX 2 147 483 647 Maximum value for an int UINT_MAX 4 294 967 295 Maximum value for an unsigned int LONG_MIN LONG_MAX 1 Minimum value for a long int LONG_MAX 549 755 813 887 Maximum value for a long int ULONG_MAX 1 099 511 627 775 Maximum value for an unsigned long int Note Negative values in this table are defined as expressions in the actual header file so that their type is correct 9 16 Header Files Table 9 2 Macros That Supply Floating Point Range Limits float h cfloat Macro FLT_RADIX FLT_ROUNDS FLT_DIG DBL_DIG LDBL_DIG FLT_MANT_DIG DBL_MANT_DIG LDBL_MANT_DIG FLT_MIN_EXP DBL_MIN_EXP LDBL_MIN_EXP FLT_MAX_EXP DBL_MAX_EXP LDBL_MAX_EXP FLT_EPSILON DBL_EPSILON LDBL_EPSILON FLT_MIN DBL_MIN LDBL_MIN FLT_MAX DBL_MAX LDBL_MAX FLT_MIN_10_EXP DBL_MIN_10_EXP LDBL_MIN_10_EXP FLT_MAX_10_EXP DBL_MAX_10_EXP LDBL_MAX_10_EXP Value 2 1 6 15 15 24 53 5
216. erations of the loop can execute at one time The shaded area represents the loop kernel In the loop kernel all five stages execute in parallel The area above the kernel is Known as the pipelined loop prolog and the area below the kernel is known as the pipelined loop epilog Figure 3 2 Software Pipelined Loop Pipelined loop prolog The assembly optimizer also software pipelines loops For more information about the assembly optimizer see Chapter 4 For more information about soft ware pipelining see the TMS320C6000 Programmer s Guide 3 4 Optimizing Software Pipelining 3 2 1 Turn Off Software Pipelining mu Option At optimization levels o2 and 03 the compiler attempts to software pipeline your loops You might not want your loops to be software pipelined for debug ging reasons Software pipelined loops are sometimes difficult to debug be cause the code is not presented serially The mu option affects both compiled C C code and assembly optimized code a a a a ET Note Software Pipelining Can Significantly Increase Code Size To reduce code size use the ms2 or ms3 option on non performance criti cal code rather than the mu option These code size options not only dis able software pipelining they enable code size reduction optimizations 3 2 2 Software Pipelining Information The compiler embeds software pipelined loop information in the asm file This information is used to optimize C C
217. erations on arbitrary sequences of bytes data objects where a 0 value does not terminate the object These functions are named memxxx When you use functions that move or copy strings be sure that the destination is large enough to contain the result The string functions are listed in Table 9 3 h on page 9 34 9 3 15 Time Functions time h ctime 9 22 The time h ctime header defines one macro and several types and declares functions that manipulate dates and times Times are represented in the following ways J As an arithmetic value of type time_t When expressed in this way a time is represented as a number of seconds since 12 00 AM January 1 1900 The time_t type is a synonym for the type unsigned long T As a structure of type struct tm This structure contains members for ex pressing time as a combination of years months days hours minutes and seconds A time represented like this is called broken down time The structure has the following members int tm_sec seconds after the minute 0 59 int tm_min minutes after the hour 0 59 int tm_hour hours after midnight 0 23 int tm_mday day of the month 1 31 int tm_mon months since January 0 11 af int tm_year years since 1900 0 and up aw int tm_wday days since Saturday 0 6 Be int tm_yday days since January 1 0 365 ad int tm_isdst daylight savings time flag ky Header Files A time whether represented as a
218. erefore must be declared far in C 3 Use the def or global directive to make the definition external 4 Precede the name with an underscore in assembly language 5 In C C declare the variable as extern and access it normally Example 8 3 shows how you can access a variable defined in bss Example 8 3 Accessing an Assembly Language Variable From C a C program extern int varl External variable E far extern int var2 External variable E varl 1 Use the variable xy var2 1 Use the variable b Assembly language program Note the use of underscores in the following lines bss _varl 4 4 Define the variable global varl Declare it as external _var2 usect mysect 4 4 Define the variable global _var2 Declare it as external Run Time Environment 8 39 Interfacing C and C With Assembly Language 8 5 7 2 Accessing Assembly Language Constants You can define global constants in assembly language by using the set def and global directives or you can define them in a linker command file using a linker assignment statement These constants are accessible from C C only with the use of special operators For normal variables defined in C C or assembly language the symbol table contains the address of the value of the variable For assembler constants however the symbol table contains the value of the constant The compiler cannot tell which items in the symbol
219. erformance degradation To remedy these problems you can use the options described in the following sections to optimize your code in such a way that you can still debug or profile it 3 12 1 Debugging Optimized Code g gw and o Options To debug optimized code use the o option in conjunction with one of the sym bolic debugging options g or gw The symbolic debugging options gener ate directives that are used by the C C source level debugger but they dis able many code generator optimizations When you use the o option which invokes the optimizer with the g option or the gw option you turn on the maximum amount of optimization that is compatible with debugging If you are having trouble debugging loops in your code you can use the mu option to turn off software pipelining See section 3 2 1 on page 3 5 for more information fe p lt gt st 2 gt t te ee ee Yt Ce CS Note The g or gw Option Causes Performance and Code Size Deg radations Using the g or gw option can cause a significant performance and code size degradation of your code Use these options for debugging only Using g or gw when profiling is not recommended Se a ee Optimizing Your Code 3 33 Debugging and Profiling Optimized Code 3 12 2 Profiling Optimized Code gp and o Options 3 34 To profile optimized code use the gp option with optimization 00 through 03 The gp optio
220. es the assembly optimizer m The optimizer modifies code to improve the efficiency of C programs The interlist utility interweaves C C source statements with assem bly language output See Chapter 2 Using the C C Compiler for information about how to invoke the C C compiler the optimizer and the interlist utility using the shell program The assembler translates assembly language source files into machine language object files The machine language is based on common object file format COFF The TMS320C6000 Assembly Language Tools User s Guide explains how to use the assembler The linker combines object files into a single executable object module As it creates the executable module it performs relocation and resolves external references The linker accepts relocatable COFF object files and object libraries as input See Chapter 5 Linking C C Code for informa tion about invoking the linker See the TMS320C6000 Assembly Lan guage Tools User s Guide for a complete description of the linker The archiver allows you to collect a group of files into a single archive file called a ibrary Additionally the archiver allows you to modify a library by deleting replacing extracting or adding members One of the most useful applications of the archiver is building a library of object modules The TMS320C6000 Assembly Language Tools User s Guide explains how to use the archiver Introduction 1 3 Software Developm
221. es use of them Furthermore these features impose no runtime penalty Chapter 8 Run Time Environment This chapter describes the TMS320C6000 C C run time environment To ensure successful execution of C C programs it is critical that all run time code maintain this environment It is also important to follow the guidelines in this chapter if you write assembly language functions that interface with C C code Topic Page S51 Memory Modelit a a a 8 2 8 2 Object Representation cc cece cece e ee eee eee eens 8 8 8 3 sRegister ConventionS ccc nes cise ae e E e seers 8 16 8 4 Function Structure and Calling Conventions 8 18 8 5 Interfacing C and C With Assembly Language 8 22 CHE UCU ell me a e cosnocmononcoou demos 8 41 8 7 Run Time Support Arithmetic Routines 2 0000es 8 43 8 8 System Initializationieeic a a E tes ne eterna E Geist 8 45 8 1 Memory Model 8 1 Memory Model 8 2 The C6000 compiler treats memory as a single linear block that is partitioned into subblocks of code and data Each subblock of code or data generated by a C program is placed in its own continuous memory space The compiler assumes that a full 32 bit address space is available in target memory C O aAEATESENNNSNSTNTTTS cS S S Note The Linker Defines the Memory Map The linker notthe compiler defines the memory map and allocates code and data into target memory Th
222. etermining when such ambiguity is not pos sible When you cannot determine whether two memory references are am biguous you presume they are ambiguous This is the same as saying the two instructions have a memory dependence between them Dependences between instructions constrain the instruction schedule includ ing the software pipeline schedule In general the fewer the dependences the greater freedom you have in choosing a schedule and the better the final schedule performs How the Assembly Optimizer Handles Memory References Default The assembly optimizer assumes all memory references are always aliased they always depend on one another This presumption is safe for all possible input This gives you complete control over how possible memory aliases are to be handled In some cases this presumption is overly conservative In such cases the ex tra instruction dependences due to the presumed memory aliases can cause the assembly optimizer to emit instruction schedules that have less parallelism and do not perform well To handle these cases the assembly optimizer pro vides one option and two directives 4 6 2 Using the mt Option to Handle Memory References In the assembly optimizer the mt option means no memory references ever depend on each other The mt option does not mean the same thing to the compiler The compiler interprets the mt switch to indicate several specific cases of memory aliasing are guaranteed
223. eturn the hyperbolic tangent of a floating point number x double x y x Y OOs tanh x return value 0 0 Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C Defined in Description tmpnam Time include lt time h gt time_t time time_t timer include lt ctime gt time_t std time time_t timer time c in rts src The time function determines the current calendar time represented in sec onds If the calendar time is not available the function returns 1 If timer is not a null pointer the function also assigns the return value to the object that timer points to For more information about the functions and types that the time h header declares and defines see section 9 3 15 Time Functions time h on page 9 22 Go eh a ee el ae ae Se eee Note The time Function Is Target System Specific The time function is target system specific so you must write your own time function CS Create Temporary File include lt stdlib h gt FILE tmpfile void include lt cstdlib gt FILE std tmpfile void tmpfile c in rts src The tmpfile function creates a temporary file Generate Valid Filename include lt stdlib h gt char tmpnam char _s include lt cstdlib gt char std tmpnam char _s tmpnam c in rts src The tmpnam function generates a string that is a valid file
224. etween the MUST_ITERATE pragma and the for while or do while loop to which it applies However other pragmas such as UNROLL and PROB_ITERATE can appear between the MUST_ITERATE pragma and the loop The syntax of the pragma for C and C is pragma MUST_ITERATE min max multiple The arguments minand maxare programmer guaranteed minimum and maxi mum trip counts The trip count is the number of times a loop iterates The trip count of the loop must be evenly divisible by multiple All arguments are option al For example if the trip count could be 5 or greater you can specify the argu ment list as follows pragma MUST_ITERATE 5 However if the trip count could be any nonzero multiple of 5 the pragma would look like this pragma MUST_ITERATE 5 5 Note the blank field for max It is sometimes necessary for you to provide min and multiple in order for the compiler to perform unrolling This is especially the case when the compiler cannot easily determine how many iterations the loop will perform i e the loop has a complex exit condition When specifying a multiple via the MUST_ITERATE pragma results of the program are undefined if the trip count is not evenly divisible by multiple Also results of the program are undefined if the trip count is less than the minimum or greater than the maximum specified If no min is specified zero is used If no max is specified the largest possible number i
225. ew 0 0c eee cence eee ees 1 2 1 2 C C Compiler Overview 0000 tenet eens 1 5 1 2 1 C C Language Features 0c eens 1 5 12 2 OUIPULFIICS 2 324 Oe aa eRe A A OT TAC Brn Sea alee e et A ead 1 6 12 3 CompillerIntertace te 24 ecf sore pd ewe e da nse eel yiare ee we fanaa od 1 6 1 2 4 Compiler Operation 0 0 ccc teens 1 7 12 5 sUUNTES ace valid ea eed ene E E A 1a ed ees rea de 1 7 Using the C C Compiler 00 cee cece eens 2 1 Describes how to operate the C C compiler and the shell program Contains instructions for invoking the shell program which compiles assembles and links a C C source file Dis cusses the interlist utility options and compiler errors 2 1 2 2 2 3 2 4 2 5 About the Shell Program 00 ccc eee tenet e eens 2 2 Invoking the C C Compiler Shell 00 0 cee eee ees 2 4 Changing the Compiler s Behavior With Options 0 0c cece eee eee 2 6 2 3 1 Frequently Used Options sanana cece cece ete e eens 2 15 2 3 2 Specifying Filenames 0c cece eects 2 18 2 3 3 Changing How the Shell Program Interprets Filenames fa fc fg fl fo and fp Options 00 cece eee eee eee 2 19 2 3 4 Changing How the Shell Program Interprets and Names Extensions ea ec el eo and ep Options 2 c cee eee 2 20 2 3 5 Specifying Directories fb ff fr fs a
226. exas Instruments Incorporated Interrupt to abort Hello world Time 3338 cycles NORMAL COMPLETION 11692 cycles Using the Stand Alone Simulator 6 9 Chapter 7 TMS320C6000 C C Language Implementation The TMS320C6000 C C compiler supports the C C language standard that was developed by a committee of the American National Standards Insti tute ANSI to standardize the C programming language The C language supported by the C6000 is defined by the ISO IEC 14882 1998 standard with certain exceptions Topic Page 7 1 Characteristics of TMS320C6000 C cece eee eee 7 2 7 2 Characteristics of TMS320C6000 C ccc cece eee 7 5 m3 mDataulyYDOSacrcecatee tetensisie a E S E E E r a a 7 6 Ue KeyWords e A E 7 7 7 5 sRegisterVatlables ie n e e e a E 7 16 m0 imheasm Statement i eee a e a aa 7 17 et Pragma Directives T a e E e a a a 7 18 7 8 Generating Linknames een e eea e e e a ae a 7 32 7 9 Initializing Static and Global Variables 00000s 7 33 7 10 Changing the ANSI C Language Mode 2 e0000 7 34 7 1 Characteristics of TMS320C6000 C 7 1 Characteristics of TMS320C6000 C 7 1 1 7 2 ANSI C supersedes the de facto C standard that is described in the first edition of The C Programming Language by Kernighan and Ritchie The ANSI stan dard is described in the American National Standard for Information Systems Programming Language C X3 159 198
227. execution of that function The stack pointer is incremented at the exit of the function to restore the stack to its state before the function was entered If you interface assembly language routines to C C programs be sure to restore the stack pointer to the state it had before the function was entered For more information about using the stack pointer see section 8 3 Register Conventions on page 8 16 for more information about the stack see section 8 4 Function Structure and Calling Conventions on page 8 18 Memory Model e gt e600 _ Xx9_o uo6 0QaQ4 05a __ Note Stack Overflow The compiler provides no means to check for stack overflow during compila tion or at run time Place the beginning of the stack section in the first ad dress after an unmapped memory space so stack overflow will cause a simu lator fault This makes this problem easy to detect Be sure to allow enough space for the stack to grow a 8 1 3 Dynamic Memory Allocation Dynamic memory allocation is not a standard part of the C language The run time support library supplied with the C6000 compiler contains several func tions such as malloc calloc and realloc that allow you to allocate memory dynamically for variables at run time Memory is allocated from a global pool or heap that is defined in the sysmem section You can set the size of the sysmem section by using the heap size option with the lin
228. exponential function of real number x The return value is the number e raised to the power x A range error occurs if the magnitude of x is too large double x y X Y 2 0 exp x y approx 7 38 e e e is 2 17828 Run Time Support Functions 9 55 exp10 exp1 Of exp10 exp1 Of Syntax for C Syntax for C Defined in Description exp2 exp2f Syntax for C Syntax for C Defined in Description 9 56 Exponential define TIENHANCED_MATH_H 1 include lt math h gt double exp10 double x float exp10f float x define TIENHANCED_MATH_H 1 include lt cmath gt double std exp10 double x float std exp10f float x exp10 c and exp1Of c in rts src The exp10 and exp1 Of functions return 10 raised to the power x where xis a real number A range error occurs if the magnitude of x is too large Exponential define TIENHANCED_MATH_H 1 include lt math h gt double exp2 double x float exp2f float x define TlIENHANCED_MATH_H 1 include lt cmath gt double std exp2 double x float std exp2f float x exp2 c and exp2f c in rts src The exp2 and exp2f functions return 2 to the power x where x is a real number A range error occurs if the magnitude of x is too large fabs fabsf Syntax for C Syntax for C Defined in Description Example Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C Defined in Descri
229. f compiling existing C programs with the C6000 ANSI C C compiler the compiler has a K amp R option pk that modifies some se mantic rules of the language for compatibility with older code In general the pk option relaxes requirements that are stricter for ANSI C than for K amp R C The pk option does not disable any new features of the language such as function prototypes enumerations initializations or preprocessor constructs Instead pk simply liberalizes the ANSI rules without revoking any of the fea tures Changing the ANSI C language Mode The specific differences between the ANSI version of C and the K amp R version of C are as follows d The integral promotion rules have changed regarding promoting an unsigned type to a wider signed type Under K amp R C the result type was an unsigned version of the wider type under ANSI the result type is a signed version of the wider type This affects operations that perform dif ferently when applied to signed or unsigned operands namely compari sons division and mod and right shift unsigned short u ints dcp LE KAAN aa SIGNED comparison unless pk used ANSI prohibits combining two pointers to different types in an operation In most K amp R compilers this situation produces only a warning Such cases are still diagnosed when pk is used but with less severity int pF char q p error without pk warning with pk External declarati
230. f src1 and src2 is subtracted from the product of the signed upper 16 bit values of src1 and src2 C6400 int _dotpnrsu2 int src7 unsigned src2 DOTPNRSU2 The product of the lower unsigned 16 bit values in src1 and src2 is sub tracted from the product of the signed upper 16 bit values of src1 and src2 2 15 is added and the result is sign shifted right by 16 C6400 int _dotprsu2 int src7 unsigned src2 T Instructions not specified with a device apply to all C6000 devices See the 7ms320C6000 Programmer s Guide for more information DOTPRSU2 The product of the first signed pair of 16 bit values is added to the product of the unsigned second pair of 16 bit values 2 15 is added and the result is sign shifted by 16 See section 8 5 3 Using Unaligned Data and 64 Bit Values for details on manipulating 8 byte data quantities Run Time Environment C6400 8 27 Interfacing C and C With Assembly Language Table 8 3 TMS320C6000 C C Compiler Intrinsics Continued C C Compiler Intrinsic int_dotprsu4 int src7 unsigned src2 unsigned _dotpu4 unsigned src7 unsigned src2 Assembly Instruction DOTPRSU4 DOTPU4 Description For each pair of 8 bit values in src1 and src2 the 8 bit value from src1 is multiplied with the 8 bit value from src2 The four products are summed together Devicet C6400 int _dpint double src DPINT Converts 64 bit double to 32 bit signed integer
231. f the the size is negative then the datais DP address patch data described below _j The second field contains the starting address of the area within the bss section where the initialization data must be copied Lj The third field contains the data that is copied into the bss section to ini tialize the variable Each variable that must be autoinitialized has an initialization record in the cinit section If the first field is negative then the record represents a list of addresses that need to be patched by adding the value of the data page pointer DP This is only required for autoinitialized pointers to near data The DP address patch autoinitialization record has the following fields Lj Anegative size in bytes of the list of addresses Lj Alist of addresses to be patched Each variable that is autoinitialized with the address of a near variable will be in the DP address patch list Example 8 6 a shows initialized global variables defined in C Example 8 6 b shows the corresponding initialization table The cinit c is a subsection in the cinit section that contains all scalar data The sub section is handeled as one record during initialization which mini mizes the overall size of the cinit section Run Time Environment 8 47 System Initialization Example 8 6 Initialization Table a Initialized variables defined in C int x short i 23 int p amp x int a 5 1 2 3 4 5
232. fects This allows the optimizer to do the following _j Delete the call to the function if the function s value is not needed _j Delete duplicate functions The pragma must appear before any declaration or reference to the function The syntax of the pragma in C is pragma FUNC_IS_ PURE func The syntax of the pragma in C is pragma FUNC _IS_ PURE In C the argument funcis the name of a function In C the pragma applies to the next function declared 7 7 9 The FUNC_IS SYSTEM Pragma The FUNC_IS_SYSTEM pragma specifies to the optimizer that the named function has the behavior defined by the ANSI standard for a function with that name The pragma must appear before any declaration or reference to the function that you want to keep The syntax of the pragma in C is pragma FUNC_IS_ SYSTEM func The syntax of the pragma in C is pragma FUNC_IS SYSTEM In C the argument funcis the name of the function to treat as an ANSI standard function In C the pragma applies to the next function declared TMS320C6000 C C Language Implementation 7 25 Pragma Directives 7 7 10 The FUNC_NEVER_RETURNS Pragma The FUNC_NEVER_RETURNS pragma specifies to the optimizer that the function never returns to its caller The pragma must appear before any declaration or reference to the function that you want to keep The syntax of the pragma in C is pragm
233. file If the optional def is omitted the nameis set to 1 Generates symbolic debugging directives that are used by the C C source level debugger and enables assembly source debugging in the assembler You can use the g op tion with the o option to maximize the amount of optimiza tion that is compatible with debugging see section 3 12 1 Debugging Optimized Code g and o Options on page 3 33 However the g option disables many optimizations because they disrupt the debugger Using the C C Compiler 2 15 Changing the Compiler s Behavior With Options idirectory k min Generates symbolic debugging directives that are used by the C C source level debugger and enables assembly source debugging in the assembler When gw is used the compiler generates DWARF debugging information DWARF is a richer debugging information format and can handle complex C constructs that the COFF debugging information format cannot You can use the g or gw option with the o option to maxi mize the amount of optimization that is compatible with de bugging see Debugging Optimized Code However the g and gw options disable many optimizations because they disrupt the debugger Adds directory to the list of directories that the compiler searches for include files You can use this option a maxi mum of 32 times to define several directories be sure to separate i options with spaces If you do
234. files are specified on the command line If any object files follow a library references from those object files to that library are not resolved You can use the x linker option to force the linker to reread all libraries until references are resolved Whenever you specify a library as linker input the linker includes and links only those library members that resolve undefined references Controlling the Linking Process 5 5 2 Run Time Initialization You must link all C C programs with an object module called boot obj When a C C program begins running it must execute boot obj first The boot obj module contains code and data to initialize the run time environment the link er automatically extracts boot obj and links it when you use c and include the appropriate run time support library in the link The archive libraries listed below contain C C run time support functions rts6200 lib rts6400 lib rts6700 lib rts6200e lib rts6400e lib rts6700e lib The boot obj module contains code and data for initializing the run time envi ronment The module performs the following tasks 1 Sets up the stack 2 Processes the run time initialization table and autoinitializes global variables when using the c option 3 Calls all global constructors 4 Calls main 5 Calls exit when main returns The run time support object libraries contain boot obj You can _j Use the archiver to extract boot obj from the library and then li
235. fine _TI_ ENHANCED_MATH_H 1 include lt math h gt double cot double x float cotf float x define _TI_ ENHANCED_MATH_H 1 include lt cmath gt double std cot double x float std cotf float x cot c and cotf c in rts src The cot and cotf functions return the cotangent of a floating point argument x which must not equal 0 0 When x is 0 0 errno is set to the value of EDOM and the function returns the most positive number Hyperbolic Cotangent define _TI_ ENHANCED_MATH_H 1 include lt math h gt double coth double x float cothf float x define TIENHANCED_MATH_H 1 include lt cmath gt double std coth double x float std cothf float x coth c and cothf c in rts src The coth and cothf functions return the hyperbolic cotangent of a floating point argument x The magnitude of the return value is 1 0 Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C Defined in Description difftime Calendar Time include lt time h gt char ctime const time_t timer include lt ctime gt char std ctime const time_t timer ctime c in rts src The ctime function converts a calendar time pointed to by timer to local time in the form of a string This is equivalent to asctime localtime timer The function returns the pointer returned by the asctime function For more information about the functions and types that the time h header declares
236. forming Program Level Optimization pm and 03 Options 3 24 Situation Solution Your application consists of C C source code and assem bly source code The assembly functions are interrupt service routines that call C C functions the C C functions that the assembly functions call are never called from C C These C C functions act like main they function as entry points into C C Add the volatile keyword to the C C variables that may be modified by the interrupts Then you can optimize your code in one of these ways m You achieve the best optimization by applying the FUNC_EXT_CALLED pragma to all of the entry point functions called from the assembly language interrupts and then compiling with pm o3 op2 Be sure that you use the pragma with all of the entry point functions lf you do not the compiler might remove the entry point func tions that are not preceded by the FUNC_EXT_CALL pragma m Compile with pm o3 op3 Because you do not use the FUNC_EXT_CALL pragma you must use the op3 op tion which is less aggressive than the op2 option and your optimization may not be as effective Keep in mind that if you use pm o3 without additional op tions the compiler removes the C functions that the assembly functions call Use the FUNC_EXT_CALLED pragma to keep these functions Indicating Whether Certain Aliasing Techniques Are Used 3 7 Indicating Whether Certain Aliasing Techniques Ar
237. full precision carried by the processor Run Time Support Functions 9 17 Header Files 9 3 7 Function Calls as near or far linkage h The linkage h header declares two macros Depending on the value of the _FAR_RTS macro the CODE ACCESS macro is set to force calls to run time support functions to be either user default near or far The FAR_RTS macro is set according to the use of the mr shell option The _DATA_ACCESS macro is set to always be far The _IDECL macro deter mines how inline functions are declared All header files that define functions or data declare include lt linkage h gt Functions are modified with CODE _ACCESS for example extern _CODE_ACCESS void exit int _status Data is modified with DATA _ACCESS for example extern _DATA_ACCESS unsigned char _ctypes_ 9 3 8 Floating Point Math math h cmath The math h cmath header declares several trigonometric exponential and hyperbolic math functions These functions are listed in Table 9 3 c on page 9 27 The math functions expect arguments either of type double or of type float and return values either of type double or of type float respectively Except where indicated all trigonometric functions use angles expressed in radians The math h cmath header also defines one macro named HUGE_VAL The math functions use this macro to represent out of range values When a function produces a floating point return value that is too large to
238. func tion if itis nonvirtual when iis 0 The 0 is the offset to the virtual function pointer within the class object Run Time Environment 8 13 Object Representation 8 2 2 Bit Fields Bit fields are the only objects that are packed within a byte Thatis two bit fields can be stored in the same byte Bit fields can range in size from 1 to 32 bits but they never span a 4 byte boundary For big endian mode bit fields are packed into registers from most significant bit MSB to least significant bit LSB in the order in which they are defined Bit fields are packed in memory from most significant byte MSbyte to least significant byte LSbyte For little endian mode bit fields are packed into registers from the LSB to the MSB in the order in which they are defined and packed in memory from LSbyte to MSbyte see Figure 8 5 Figure 8 5 illustrates bit field packing using the following bit field definitions struct Int A int B int C 7 10 3 int D 2 int E x 9 AO represents the least significant bit of the field A A1 represents the next least significant bit etc Again storage of bit fields in memory is done with a byte by byte rather than bit by bit transfer Figure 8 5 Bit Field Packing in Big Endian and Little Endian Formats MS LS Big endian AAAAAAABIBBBBBBBBIBCCCDDEEJEEEEEEE X register 65432109 8 765432 0210 0871 6543210X 31 0 Byte 0 Byte 1 Byte 2 Byte 3 Big e
239. function restores the environment that was saved in the jmp_buf argument by the most recent invocation of the setjmp macro If the setimp macro was not invoked or if it terminated execution irregularly the behavior of longjmp is undefined After longjmp is completed the program execution continues as if the cor responding invocation of setjmp had just returned the value specified by _val The longjmp function does not cause setjmp to return a value of 0 even if _val is 0 If _val is 0 the setjmp macro returns the value 1 Run Time Support Functions 9 85 setvbuf Example Syntax for C Syntax for C Defined in Description 9 86 These functions are typically used to effect an immediate return from a deeply nested function call include lt setjmp h gt jmp_buf env main int errcode if errcode setjmp env 0 nest1 else switch errcode estin O if input ERRCODE42 return to setjmp call in main longjmp env ERRCODE42 Define and Associate Buffer With Stream include lt stdlib h gt int setvbuf register FILE _fp register char _buf register int _type register size_t _size include lt cstdlib gt int std setvbuf register FILE _fp register char _buf register int _type register size_t _size setvbuf c in rts src The setvbuf function defines and associates the buffer used by the stream pointed to by _fp If _buf is
240. g Static and Global Variables The ANSI C standard specifies that global extern and static variables without explicit initializations must be initialized to 0 before the program begins run ning This task is typically done when the program is loaded Because the load ing process is heavily dependent on the specific environment of the target application system the compiler itself makes no provision for preinitializing variables at run time It is up to your application to fulfill this requirement If your loader does not preinitialize variables you can use the linker to prein itialize the variables to 0 in the object file For example in the linker command file use a fill value of 0 in the bss section SECTIONS bss fill 0x00 Because the linker writes a complete load image of the zeroed bss section into the output COFF file this method can have the unwanted effect of significantly increasing the size of the output file but not the program If you burn your application into ROM you should explicitly initialize variables that require initialization The preceding method initializes bss to 0 only atload time not at system reset or power up To make these variables 0 at run time explicitly define them in your code For more information about linker command files and the SECTIONS direc tive see the linker description information in the TMS320C6000 Assembly Language Tools User s Guide TMS320C6000 C C Language
241. g _nassert to En able SIMD and Expand Compiler Knowledge of Loops on page 8 35 The assert function is listed in Table 9 3 a on page 9 26 9 3 2 Character Typing and Conversion ctype h cctype The ctype h cctype header declares functions that test type of characters and converts them The character typing functions test a character to determine whether it is a letter a printing character a hexadecimal digit etc These functions return a value of true a nonzero value or false 0 Character typing functions have names in the form isxxx for example sdigit The character conversion functions convert characters to lowercase uppercase or ASCII and return the converted character Character conversion functions have names in the form toxxx for example toupper Header Files The ctype h cctype header also contains macro definitions that perform these same operations The macros run faster than the corresponding functions Use the function version if an argument is passed that has side effects The typing macros expand to a lookup operation in an array of flags this array is defined in ctype c The macros have the same name as the corresponding functions but each macro is prefixed with an underscore for example _isdigit The character typing and conversion functions are listed in Table 9 3 b page 9 26 9 3 3 Error Reporting errno h cerrno The errno h cerrno header declares the errno variable The errno variable
242. g during interrupts 7 10 use in interrupts 8 41 related documentation v vi relaxed ANSI mode 7 36 relocation defined A 7 remarks 2 29 remove function 9 82 removing epilogs aggressively 3 14 rename function 9 82 rename I O function 9 9 restrict keyword 7 14 rewind function 9 83 round function 9 83 roundf function 9 83 rounding functions 9 83 rsqrt function 9 84 rsqrtf function 9 84 run time environment defined A 7 function call conventions 8 18 to 8 21 interfacing C with assembly language 8 22 to 8 40 interrupt handling described 8 41 saving registers 7 10 introduction 8 1 memory model during autoinitialization 8 6 dynamic memory allocation 8 5 sections 8 3 register conventions 8 16 to 8 17 stack 8 4 system initialization 8 45 to 8 52 run time support functions defined A 8 introduction 9 1 summary 9 25 to 9 36 Index 15 Index run time support continued libraries defined A 8 described 1 4 9 2 library build utility 10 1 linking C code 5 2 5 8 library function inline expansion 3 42 macros summary 9 25 to 9 36 run time initialization of variables 8 6 s extension 2 18 s option linker 5 7 shell 2 17 2 43 sa extension 2 18 SAT bit side effects 8 37 saving registers during interrupts 7 10 scanf function 9 84 searches 9 48 section allocating memory 5 11 bss 8 3 cinit 8 3 const 8 3 defined A 8 described 8 3 far 8 3 initialized 8 3 stack 8 3 switch 8 3 sysmem 8 3 text 8 3 uninitial
243. gnostics Option Effect pdr Issues remarks nonserious warnings pdv Provides verbose diagnostics that display the original source with line wrap pdw Suppresses warning diagnostics errors are still issued e Options that control the optimization level Option Effect 00 Compiles with register optimization o1 Compiles with o0 optimization local optimization 02 or 0 Compiles with o1 optimization global optimization 03 Compiles with o2 optimization file optimization Note that mk6x automatically sets ol0 and op0 f Option that controls the assembler Option Effect as Keeps labels as symbols g Options that change the default file extensions Option Effect ea Jnew extension Sets default extension for assembly files eo Jnew extension Sets default extension for object files Page 2 38 7 34 7 36 7 36 Page 2 31 2 32 2 32 Page 3 2 3 2 3 3 Page 2 22 Page 2 20 2 20 Chapter 11 C Name Demangler The C compiler implements function overloading operator overloading and type safe linking by encoding a function s signature in its link level name The process of encoding the signature into the linkname is often referred to as name mangling When you inspect mangled names such as in assembly files or linker output it can be difficult to associate a mangled name with its cor responding name in the C source code The C name demangler is
244. gt int getc FILE _fp include lt cstdio gt int std getc FILE _fp fgetc c in rts src The getc function reads the next character in the file pointed to by _ fp Run Time Support Functions 9 65 getchar Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C Defined in Description 9 66 Read Next Character From Standard Input include lt stdio h gt int getchar void include lt cstdio gt int std getchar void fgetc c in rts src The getchar function reads the next character from the standard input device Get Environment Information include lt stdlib h gt char getenv const char _string include lt cstdlib gt char std getenv const char _string trgdrv c in rts src The getenv function returns the environment information for the variable associated with _ string Read Next From Standard Input include lt stdio h gt char gets char _ ptr include lt cstdio gt char std gets char _ptr fgets c in rts src The gets function reads an input line from the standard input device The char acters are placed in the array named by _ ptr Use the function fgets instead of gets when possible Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C Defined in SXXX Greenwich Mean Time include lt time h gt struct tm gmtime const t
245. guage Implementation 7 31 Generating Linknames 7 8 Generating Linknames 7 32 The compiler transforms the names of externally visible identifiers when creat ing their linknames The algorithm used depends on the scope within which the indentifier is declared For objects and C functions an unscore _ is pre fixed to the identifier name C functions are prefixed with an underscore also but the function name is modified further Mangling is the process of embedding a function s signature the number and types of its parameters into its name Mangling occurs only in C code The mangling algorithm used closely follows that described in The Annotated Ref erence Manual ARM Mangling allows function overloading operator over loading and type safe linking For example the general form of a C linkname for a function named func is __func__Fparmcodes Where parmcodes is a sequence of letters that encodes the parameter types of func For this simple C source file int foo int i global C function This is the resulting assembly code gt foo Fi The linkname of foo is __foo __Fi indicating that foo is a function that takes a single argument of type int To aid inspection and debugging a name deman gling utility is provided that demangles names into those found in the original C source See Chapter 11 C Name Demangling for more information Initializing Static and Global Variables 7 9 Initializin
246. gument and so on Arguments placed on the stack must be aligned to a value appropriate for their size An argument that is not declared in a proto type and whose size is less than the size of int is passed as an int An argu ment that is a float is passed as double if it has no prototype declared A structure argument is passed as the address of the structure It is up to the called function to make a local copy For a function declared with an ellipsis indicating that it is called with vary ing numbers of arguments the convention is slightly modified The last explicitly declared argument is passed on the stack so that its stack address can act as a reference for accessing the undeclared arguments Figure 8 6 shows the register argument conventions Function Structure and Calling Conventions Figure 8 6 Register Argument Conventions int funcl int a int b int c A4 A4 B4 A6 int func2 int a float b int c struct Ad float e int f int g A4 A4 B4 A6 B6 A8 B8 A10 int func3 int a double b float c long double d A4 A4 B5 B4 A6 B7 B6 NOTE The following function has a variable number of arguments int vararg int a int b int c int d EROE A4 A4 B4 A6 stack struct A func4 int y A3 A4 2 The calling function must save registers AO to A9 and BO to B9 and A16 to A31 and B16 to B31 for C6400 if their values are needed after the call by pushing the values onto the stack The caller parent ca
247. hanges the alignment of top level arrays to 4 bytes when the mv6400 switch is used Using the Interlist Utility 2 13 Using the Interlist Utility The compiler tools include a utility that interlists C C source statements into the assembly language output of the compiler The interlist utility enables you to inspect the assembly code generated for each C statement The interlist util ity behaves differently depending on whether or not the optimizer is used and depending on which options you specify The easiest way to invoke the interlist utility is to use the ss option To compile and run the interlist utility on a program called function c enter cl6x ss function The ss option prevents the shell from deleting the interlisted assembly lan guage output file The output assembly file function asm is assembled nor mally When you invoke the interlist utility without the optimizer the interlist utility runs as a separate pass between the code generator and the assembler It reads both the assembly and C C source files merges them and writes the C C statements into the assembly file as comments Using the ss option can cause performance and or code size degradation Example 2 3 shows a typical interlisted assembly file Using the C C Compiler 2 43 Using the Interlist Utility Example 2 3 An Interlisted Assembly Language File _main STW D2 B3 SP 12 STW D2 Al10 SP 8 5 prin
248. haracters of the object that ct points to with the object that cs points to The function returns one of the following values lt 0 if cs is less than ct 0 if cs is equal to ct gt 0 if cs is greater than ct The memcmp function is similar to strncmp except that the objects that memcmp compares can contain values of 0 Run Time Support Functions 9 73 memcpy Syntax for C Syntax for C Defined in Description memmove Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C Defined in Description 9 74 Memory Block Copy Nonoverlapping include lt string h gt void memcpy void s1 const void s2 register size_t n include lt cstring gt void std memcpy void s1 const void s2 register size_t n memcpy c in rts src The memcpy function copies n characters from the object that s2 points to into the object that s1 points to If you attempt to copy characters of overlapping objects the function s behavior is undefined The function returns the value of s1 The memcpy function is similar to strncpy except that the objects that memcpy copies can contain values of 0 Memory Block Copy Overlapping include lt string h gt void memmove void s1 const void s2 size_t n include lt cstring gt void std memmove void s1 const void s2 size_t n memmove c in rts src The memmove function moves n characters from the object that s2 poi
249. he cinit section in the object file _ Determine that STYP_COPY is set in the cinit section header so that it knows not to copy the cinit section into memory _j Understand the format of the initialization tables Figure 8 10 illustrates the initialization of variables at load time Figure 8 10 Initialization at Load Time Object file Memory cinit section bss section Run Time Environment 8 51 8 52 Chapter 9 Run Time Support Functions Some of the tasks that a C C program performs such as I O dynamic memory allocation string operations and trigonometric functions are not part of the C C language itself However the ANSI C standard defines a set of run time support functions that perform these tasks The TMS320C6000 C C compiler implements the complete ANSI standard library except for those facilities that handle exception conditions and locale issues properties that depend on local language nationality or culture Using the ANSI stan dard library ensures a consistent set of functions that provide for greater porta bility In addition to the ANSI specified functions the TMS320C6000 run time sup port library includes routines that give you processor specific commands and direct C language I O requests A library build utility is provided with the code generation tools that lets you create customized run time support libraries The use of this utility is covered in Chapter 10 Lib
250. he current module but defined in another hex conversion utility A utility that converts COFF object files into one of several standard ASCII hexadecimal formats suitable for loading into an EPROM programmer indirect call A function call where one function calls another function by giv ing the address of the called function initialization at load time An autoinitialization method used by the linker when linking C C code The linker uses this method when you invoke the linker with the cr option This method initializes variables at load time instead of run time initialized section A COFF section that contains executable code or data An initialized section can be built with the data text or sect directive integrated preprocessor A C C preprocessor that is merged with the parser allowing for faster compilation Stand alone preprocessing or preprocessed listing is also available interlist utility A utility that inserts as comments your original C C source statements into the assembly language output from the assembler The C C statements are inserted next to the equivalent assembly instruc tions Glossary kernel The body of a software pipelined loop between the pipelined loop prolog and the pipelined loop epilog K amp RC Kernighanand Ritchie C the de facto standard as defined in the first edition of The C Programming Language K amp R Most K amp R C programs written for earlier non ANSI C compilers
251. he function by adding a constant to register B15 SP 9 The function returns by jumping to the value of the return register B3 or the saved value of the return register 8 4 3 Accessing Arguments and Local Variables A function accesses its stack arguments and local nonregister variables indi rectly through register A15 FP or through register B15 SP one of which points to the top of the stack Since the stack grows toward smaller addresses the local and argument data for a function are accessed with a positive offset from FP or SP Local variables temporary storage and the area reserved for stack arguments to functions called by this function are accessed with offsets smaller than the constant subtracted from FP or SP at the beginning of the function Stack arguments passed to this function are accessed with offsets greater than or equal to the constant subtracted from register FP or SP at the begin ning of the function The compiler attempts to keep register arguments in their original registers if the optimizer is used or if they are defined with the register keyword Otherwise the arguments are copied to the stack to free those regis ters for further allocation For information on whether FP or SP is used to access local variables tempo rary storage and stack arguments see section 8 4 2 How a Called Function Responds on page 8 19 Run Time Environment 8 21 Interfacing C and C With Assembly Language 8 5 8 5 1
252. he high level I O calls look at how the file was opened in an fopen statement and prevent certain actions depending on the open attributes J The mode is required but ignored The function returns one of the following values stream number assigned by the low level routines that the device level driver associates with the opened file or device if successful lt 0 if not successful Syntax for C Syntax for C Description Return Value Syntax for C Syntax for C Description Return Value Read Characters From Buffer include lt stdio h gt include lt file h gt int read int file_descriptor char buffer unsigned count include lt cstdio gt include lt file h gt int std read int file_descriptor char buffer unsigned cound rename The read function reads the number of characters specified by count to the buffer from the device or file associated with file_descriptor tines that is associated with the opened file or device placed The function returns one of the following values 0 if EOF was encountered before the read was complete number of characters read in every other instance 1 if not successful Rename File include lt stdio h gt include lt file h gt int rename char old_name char new_name include lt cstdio gt include lt file h gt int std rename char o d_name char new_name The rename function changes the name of a file Lj The old_na
253. he program does not change a Table 8 3 TMS320C6000 C C Compiler Intrinsics Assembly C C Compiler Intrinsic Instruction Description Devicet int __abs int src ABS Returns the saturated absolute value int _labs long src Ouste int _abs2 int src ABS2 Calculates the absolute value for C6400 each 16 bit value int _add2 int src7 int src2 ADD2 Adds the upper and lower halves of src1 to the upper and lower halves of src2 and returns the result Any over flow from the lower half add does not affect the upper half add int _add4 int src7 int src2 ADD4 Performs 2s complement addition to C6400 pairs of packed 8 bit numbers ushort amp _amem2 void ptr LDHU Allows aligned loads and stores of 2 C6400 STHU bytes to memory uint amp _amem4 void ptr LDW Allows aligned loads and stores of 4 C6400 STW bytes to memory T Instructions not specified wi ith a device apply to all C6000 devices See the 7ms320C6000 Programmer s Guide for more information See section 8 5 3 Using Unaligned Data and 64 Bit Values for details on manipulating 8 byte data quantities Run Time Environment 8 25 Interfacing C and C With Assembly Language Table 8 3 TMS320C6000 C C Compiler Intrinsics Continued Assembly C C Compiler Intrinsic Instruction Description Devicet double amp _amemd8 void ptr LDDW Allows aligned loads and stores of 8 C6400 STDW bytes to memory or LDW LDW
254. hen you use pm and 03 you must use an op option or the FUNC_EXT_CALLED pragma See section 3 6 2 Optimization Consid erations When Mixing C and Assembly on page 3 22 for information about these situations In Code Composer Studio selecting any type of program level optimization causes pmm instead of pm to appear in the Options field of the Build Options dialog box on the Compiler tab Basic category Using pmm is required to specify any type of program level optimization in Code Composer Studio 3 6 2 Optimization Considerations When Mixing C C and Assembly 3 22 If you have any assembly functions in your program you need to exercise cau tion when using the pm option The compiler recognizes only the C C source code and not any assembly code that might be present Because the compiler does not recognize the assembly code calls and variable modifica tions to C C functions the pm option optimizes out those C C functions To keep these functions place the FUNC_EXT_CALLED pragma see section 7 7 6 The FUNC_EXT_CALLED Pragma on page 7 23 before any declara tion or reference to a function that you want to keep Another approach you can take when you use assembly functions in your pro gram is to use the opn option with the pm and o3 options see section 3 6 1 Controlling Program Level Optimization on page 3 21 Performing Program Level Optimization pm and 03 Options In general you achieve
255. hen you use program level optimization you may need to use the FUNC_EXT_CALLED pragma with certain options See section 3 6 2 Opti mization Considerations When Mixing C and Assembly on page 3 22 7 7 7 The FUNC_INTERRUPT_THRESHOLD Pragma 7 24 The compiler allows interrupts to be disabled around software pipelined loops for threshold cycles within the function This implements the mi option for a single function see section 2 11 Interrupt Flexibility Options on page 2 41 The FUNC_INTERRUPT_THRESHOLD pragma always overrides the min command line option A threshold value less than 0 assumes that the function is never interrupted which is equivalent to an interrupt threshold of infinity The syntax of the pragma in C is pragma FUNC_INTERRUPT_THRESHOLD func threshold The syntax of the pragma in C is pragma FUNC_INTERRUPT_THRESHOLD threshold The following examples demonstrate the use of different thresholds pragma FUNC_INTERRUPT_THRESHOLD foo 2000 The function foo must be interruptible at least every 2 000 cycles _ pragma FUNC_INTERRUPT_THRESHOLD foo 1 The function foo must always be interruptible _J pragma FUNC_INTERRUPT_THRESHOLD foo 1 The function foo is never interrupted Pragma Directives 7 7 8 The FUNC_IS_ PURE Pragma The FUNC_IS_PURE pragma specifies to the optimizer that the named func tion has no side ef
256. i able associated with _ string Returns the absolute value of i expands inline Divides numer by denom Converts val to the equivalent string Allocates memory for an object of size bytes Allocates memory for an object of size bytes aligned to an alignment byte boundary Resets all the memory previously allocated by malloc calloc or realloc Sorts an array of nmemb members base points to the first member of the unsorted array and size specifies the size of each member Run Time Support Functions Page 9 37 9 37 9 46 9 47 9 47 9 47 9 48 9 49 9 54 9 55 9 62 9 66 9 37 9 54 9 71 9 72 9 72 9 75 9 80 9 33 Summary of Run Time Support Functions and Macros g General functions stdlib h cstdlib Function int rand void void realloc void packet size_t size void srand unsigned int seed double strtod const char st char endptr long strtol const char st char endptr int base unsigned long strtoul const char st h String functions string h cstring char endptr int base Function void memchr const void cs int c size_t n int memcemp const void cs const void ct void memcpy void s1 const void s2 void memmove void s1 const void s2 void memset void mem register int ch char streat char string1 const char string2 char strcehr const char string int c int stremp register const char string1
257. ial memory pool or heap The constant ___SYSMEM_SIZE defines the size of the heap as 2K bytes You can change this amount at link time by invoking the linker with the heap option and specifying the desired size of the heap in bytes directly after the option For more information see section 8 1 3 Dynamic Memory Allocation on page 8 5 Remove File include lt stdlib h gt int remove const char _file include lt cstdlib gt int std remove const char _file remove c in rts src The remove function makes the file pointed to by _ file no longer available by that name Rename File include lt stdlib h gt int rename const char old_name const char new_name include lt cstdlib gt int std rename const char old_name const char new_name lowlev c in rts src The rename function renames the file pointed to by old_name The new name is pointed to by new_name Syntax for C Syntax for C Defined in Description round roundf Syntax for C Syntax for C Defined in Description Example round roundf Position File Position Indicator to Beginning of File include lt stdlib h gt int rewind register FILE _fp include lt cstdlib gt int std rewind register FILE _fp rewind c in rts src The rewind function sets the file position indicator for the stream pointed to by _fp to the beginning of the file Round to Nearest Integer define TlENHANCED_MATH_H 1 include lt math
258. ibrary supportis notincluded C subset and basic language support is included These C headers for C library facilities are not included lt ciso646 gt lt clocale gt lt csignal gt lt cwchar gt lt cwctype gt These C headers are the only C standard library header files in cluded mM lt new gt E lt typeinfo gt No support for bad_cast or bad_type_id is included in the typeinfo header Exception handling is not supported Run time type information RTTI is disabled by default RTTI can be en abled with the rtti shell option The reinterpret_cast type does not allow casting a pointer to member of one class to a pointer to member of a another class if the classes are unre lated Two phase name binding in templates as described in tesp res and temp dep of the standard is not implemented Template parameters are not implemented The export keyword for templates is not implemented A typedef of a function type cannot include member function cv qualifiers A partial specialization of a class member template cannot be added out side of the class definition TMS320C6000 C C Language Implementation 7 5 Data Types 7 3 Data Types Table 7 1 lists the size representation and range of each scalar data type for the C6000 compiler Many of the range values are available as standard mac ros in the header file limits h For more information see section 9 3 6 Limits float h and limits h on page
259. ic identifier For more information about diagnostic messages see section 2 6 Understanding Diagnostic Mes sages on page 2 29 Using the C C Compiler 2 35 Using Inline Function Expansion 2 10 Using Inline Function Expansion When an inline function is called the C C source code for the function is inserted at the point of the call This is known as inline function expansion In line function expansion is advantageous in short functions for the following reasons Q It saves the overhead of a function call J Once inlined the optimizer is free to optimize the function in context with the surrounding code There are several types of inline function expansion _j inlining with intrinsic operators intrinsics are always inlined Automatic inlining E _j Definition controlled inlining with the unguarded inline keyword m Definition controlled inlining with the guarded inline keyword BE E a aa a owt hUce t s S SCO Note Function inlining Can Greatly Increase Code Size Expanding functions inline increases code size especially inlining a function that is called in a number of places Function inlining is optimal for functions that are called only from a small number of places and for small functions If your code size seems too large see section 3 4 Reducing Code Size ms Option on page 3 17 E aa 2 10 1 Inlining Intrinsic Operators There are many intrinsic operators for the C6
260. ier along with its text Use this option in determining which arguments you need to supply to the diagnostic suppression options pds pdse pdsr and pdsw This option also indicates whether a diagnostic is discretionary A discretionary diagnostic is one whose severity can be over ridden A discretionary diagnostic includes the suffix D other wise no suffix is present See section 2 6 Understanding Diagnostic Messages on page 2 29 for more information Produces a diagnostics information file with the same name as the corresponding source file with an err extension Issues remarks nonserious warnings which are suppressed by default Suppresses the diagnostic identified by num To determine the numeric identifier of a diagnostic message use the pden op tion first ina separate compile Then use pds numto suppress the diagnostic You can suppress only discretionary diagnos tics Categorizes the diagnostic identified by numas an error To de termine the numeric identifier of a diagnostic message use the pden option first in a separate compile Then use pdse num to recategorize the diagnostic as an error You can alter the se verity of discretionary diagnostics only Categorizes the diagnostic identified by num as a remark To determine the numeric identifier of a diagnostic message use the pden option first in a separate compile Then use pdsr num to recategorize the diagnostic as a remark You ca
261. iguation A technique that determines when two pointer ex pressions cannot point to the same location allowing the compiler to freely optimize such expressions aliasing The ability for a single object to be accessed in more than one way such as when two pointers point to a single object It can disrupt optimiza tion because any indirect reference could refer to any other object allocation A process in which the linker calculates the final memory addresses of output sections American National Standards Institute ANSI An organization that esta blishes standards voluntarily followed by industries archive library A collection of individual files grouped into a single file by the archiver archiver A software program that collects several individual files into a sin gle file called an archive library With the archiver you can add delete extract or replace members of the archive library assembler A software program that creates a machine language program from a source file that contains assembly language instructions direc tives and macro definitions The assembler substitutes absolute opera tion codes for symbolic operation codes and absolute or relocatable addresses for symbolic addresses assembly optimizer A software program that optimizes linear assembly code which is assembly code that has not been register allocated or scheduled The assembly optimizer is automatically invoked with the shell program cl6x wh
262. ile The switch section contains jump tables for large switch state ments The text section contains all the executable code I Uninitialized sections reserve space in memory usually RAM A pro gram can use this space at run time to create and store variables The compiler creates the following uninitialized sections The bss section reserves space for global and static variables When you specify the c linker option at program startup the C boot routine copies data out of the cinit section which can be in ROM and stores it in the bss section The compiler defines the global symbol bss and assigns bss the value of the starting address of the bss section The far section reserves space for global and static variables that are declared far The stack section allocates memory for the system stack This memory passes arguments to functions and allocates local variables The sysmem section reserves space for dynamic memory alloca tion The reserved space is used by the malloc calloc and realloc functions If a C C program does not use these functions the compiler does not create the sysmem section a Ie a a a a a eT Note Use Only Code in Program Memory With the exception of text the initialized and uninitialized sections cannot be allocated into internal program memory eee Run Time Environment 8 3 Memory Model The assembler creates the default sections text bss and data The C C
263. ime_t timer include lt ctime gt struct tm std gmtime const time_t timer gmtime c in rts src The gmtime function converts a calendar time pointed to by timer into a broken down time which is expressed as Greenwich Mean Time For more information about the functions and types that the time h header declares and defines see section 9 3 15 Time Functions time h on page 9 22 Character Typing include lt ctype h gt int isalnum int c int isalpha int c int isascii int c int isentrl int c int isdigit int c int isgraph int c int islower int c int isprint int c int ispunct int c int isspace int c int isupper int c int isxdigit int c wa include lt cctype gt int std int std int std int std int std int std int std int std int std int std int std int std isalnum int c isalpha int c isascii int c iscntrl int c isdigit int c isgraph int c islower int c isprint int c ispunct int c isspace int c isupper int c isxdigit int c isxxx c and ctype c in rts src Also defined in ctype h cctype as macros Run Time Support Functions 9 67 isxxx Description 9 68 These functions test a single argument c to see if itis a particular type of char acter alphabetic alphanumeric numeric ASCIl etc If the test is true the function returns a nonzero value if the test is false the function returns 0
264. imizer has rearranged and optimized the code These comments appear in the assembly language file as comments starting with The C C source code is not interlisted unless you use the ss option also The interlist utility can affect optimized code because it might prevent some optimization from crossing C C statement boundaries Optimization makes normal source interlisting impractical because the optimizer extensively rear ranges your program Therefore when you use the os option the optimizer writes reconstructed C C statements Example 3 2 shows the function from Example 2 3 on page 2 44 compiled with the optimizer o2 and the os option Note that the assembly file contains optimizer comments interlisted with assembly code i 8 1 a e 20x Note Impact on Performance and Code Size The ss option can have a negative effect on performance and code size ee Using the Interlist Utility With the Optimizer Example 3 2 The Function From Example 2 3 Compiled With the o2 and os Options _main PERD printf Hello world n Re 6 return 0 STW D2 B3 SP 12 line 3 B JSI _printf OP 2 VKL S1 SL1 0 A0 VKH GSI SL1 0 A0 VKL S2 RLO B3 STW D2 AO SP 4 VKH 1 52 RLO B3 RLO CALL OCCURS line 4 ZERO edd A4 line 5 LDW D2 4 SP 12 B3 NOP 4 B S2 B3 NOP 5 BRANCH OCCURS endfunc 7 000080400h 12 When you use the ss and os options with
265. in rts src The floor and floorf functions return a floating point number that represents the largest integer less than or equal to x double answer floor 3 1415 answer floor 3 5 answer 33 0 7 40 answer answer Run Time Support Functions 9 59 fmod fmodf fmod fmodf Syntax for C Syntax for C Defined in Description Example Syntax for C Syntax for C Defined in Description 9 60 Floating Point Remainder include lt math h gt double fmod double x double y float fmodf float x float y include lt cmath gt double std fmod double x double y float std fmodf float x float y fmod c and fmodf c in rts src The fmod and fmodf functions return the exact floating point remainder of x divided by y If y 0 the function returns 0 The functions are equivalent mathematically to x trunc x y x y but not to the C expression written the same way For example fmod x 3 0 is 0 0 1 0 or 2 0 for any small integer x gt 0 0 When x is large enough that x y can no longer be expressed exactly fmod x 3 0 continues to yield correct answers while the C expression returns 0 0 for all values of x double x Yy T x 11 0 y 5 0 r fmod x y fmod returns 1 0 Open File include lt stdio h gt FILE fopen const char _fname const char _mode include lt cstdio gt FILE std fopen const char _fname const char _mode fopen c in rt
266. ing C and C With Assembly Language The TMS320C6000 Programmer s Guide states that one of the ways to refine C C code is to use word accesses to operate on 16 bit data stored in the high and low parts of a 32 bit register Examples using casts to int pointers are shown with the use of intrinsics to use certain instructions like _mpyh This can be automated by using the _nassert intrinsic to specify that 16 bit short ar rays are aligned on a 32 bit word boundary The following two examples generate the same assembly code Lj Example 1 int dot_product short x short y short z int w_x int x int w_y int y int suml 0 sum2 0 i for i 0 i lt 2 2 i suml _mpy w_x i w_y i sum2 _mpyh w_x i w_y i return suml sum2 Lj Example 2 int dot_product short x short y short z int sum 0 i _nassert int x amp 0x3 0 _nassert int y amp 0x3 0 pragma MUST_ITERATE 20 4 for i Oe 2 lt zee Let sum 0x oy el return sum lt SS oO SS Note C Syntax for _nassert In C code _nassert is part of the standard namespace Thus the correct syntax is std _nassert 8 36 Interfacing C and C With Assembly Language 8 5 5 SAT Bit Side Effects The saturated intrinsic operations define the SAT bit if saturation occurs The SAT bit can be set and cleared from C C code by access
267. ing the control sta tus register CSR The compiler uses the following steps for generating code that accesses the SAT bit 1 The SAT bit becomes undefined by a function call or a function return This means that the SAT bit in the CSR is valid and can be read in C C code until a function call or until a function returns 2 Ifthe code in afunction accesses the CSR then the compiler assumes that the SAT bit is live across the function which means m The SAT bit is maintained by the code that disables interrupts around software pipelined loops m Saturated instructions cannot be speculatively executed 3 If an interrupt service routine modifies the SAT bit then the routine should be written to save and restore the CSR Run Time Environment 8 37 Interfacing C and C With Assembly Language 8 5 6 Using Inline Assembly Language 8 38 Within a C C program you can use the asm statement to insert a single line of assembly language into the assembly language file created by the compiler Aseries of asm statements places sequential lines of assembly language into the compiler output with no intervening code For more information see sec tion 7 6 The asm Statement on page 7 17 The asm statement is useful for inserting comments in the compiler output Simply start the assembly code string with a semicolon as shown below asm this is an assembly language comment EE ee eh Note Using the asm Statement Ke
268. ing tool such as a simulator or an emulator target system The system on which the object code you have developed is executed text section One of the default COFF sections The text section is initial ized and contains executable code You can use the text directive to as semble code into the text section trigraph sequence A 3 character sequence that has a meaning as de fined by the ISO 646 1983 Invariant Code Set These characters cannot be represented in the C character set and are expanded to one charac ter For example the trigraph is expanded to trip count The number of times that a loop executes before it terminates uninitialized section A COFF section that reserves space in the memory map but that has no actual contents These sections are built with the Oss and usect directives unsigned value A value that is treated as a nonnegative number regard less of its actual sign variable A symbol representing a quantity that can assume any of a set of values Glossary A 9 in linear assembly source 4 14 include directive generating list of files included 2 28 shell option 2 15 in linear assembly source 4 14 gt gt symbol 2 33 a linker option 5 6 aa shell option 2 22 abort function 9 37 abs extension 2 18 abs function 9 37 absolute listing creating 2 22 absolute value abs labs functions 9 37 fabs function 9 57 fabsf function 9 57 ac shell option 2 22 acos
269. inhf function 9 44 asm extension 2 18 asm statement described 7 17 in optimized code 3 28 using 8 38 assembler controlling with compiler shell 2 22 defined A 1 described 1 3 options summary 2 13 assembly language accessing constants 8 40 global variables 8 39 variables 8 39 calling with intrinsics 8 25 code interfacing 8 22 embedding 7 17 including 8 38 interlisting with C code 2 43 interrupt routines 8 42 module interfacing 8 22 retaining output 2 16 assembly listing file creation 2 22 assembly optimizer defined A 1 described 1 3 invoking 4 4 using 4 1 to 4 16 assembly source debugging 2 15 assert function 9 44 Index 2 assert h header described 9 14 summary of functions 9 26 assignment statement defined A 1 atan function 9 45 atan2 function 9 45 atan2f function 9 45 atanf function 9 45 atanh function 9 46 atanhf function 9 46 atexit function 9 46 atof function 9 47 atoi function 9 47 atol function 9 47 au shell option 2 22 autoinitialization at runtime defined A 2 described 8 50 defined A 2 initialization tables 8 47 of variables 8 6 8 46 types of 5 10 ax shell option 2 22 b option linker 2 14 5 6 standalone simulator 6 4 banner suppressing 2 17 base 10 logarithm 9 70 base 2 logarithm 9 71 big endian defined A 2 producing 2 16 _BIG_ENDIAN macro 2 24 bit fields 7 4 allocating 8 14 size andtype 7 36 block copy functions nonoverlapping memory 9 74 overlapping memory 9 74 defined
270. ion with the 03 option With program level optimization all of your source files are compiled into one intermediate file called a module The module moves to the optimization and code generation passes of the compiler Because the com piler can see the entire program it performs several optimizations that are rarely applied during file level optimization J Ifaparticular argument in a function always has the same value the com piler replaces the argument with the value and passes the value instead of the argument J Ifareturn value of a function is never used the compiler deletes the return code in the function Lj Ifa function is not called directly or indirectly the compiler removes the function To see which program level optimizations the compiler is applying use the on2 option to generate an information file See section 3 5 2 Creating an Op timization Information File onn Option on page 3 19 for more information In Code Composer Studio selecting any type of program level optimization causes pmm instead of pm to appear in the Options field of the Build Op tions dialog box on the Compiler tab Basic Category Using pmm is required to specify any type of program level optimization in Code Composer Studio In Code Composer Studio when the pm option is used C and C files that have the same options are compiled together However if any file has a file specific option that is not selected as a project
271. ions and the device level drivers that actually perform the I O command on the specified device The low level functions also define and maintain a stream table that associates a file descriptor with a device The stream table interacts with the device table to ensure that an I O command performed on a stream executes the correct device level routine The data structures interact as shown in Figure 9 1 Figure 9 1 Interaction of Data Structures in I O Functions Stream table Device table file_descriptor1 open read p eee file_descriptor2 open read p eoo The first three streams in the stream table are predefined to be stdin stdout and stderr and they point to the host device and associated device drivers Run Time Support Functions 9 5 The C I O Functions Figure 9 2 The First Three Streams in the Stream Table Stream table file_descriptor1 stdin file_descriptor2 stdout file_descriptor3 stderr At the next level are the user definable device level drivers They map directly to the low level I O functions The run time support library includes the device drivers necessary to perform I O on the host on which the debugger is running The specifications for writing device level routines to interface with the low level routines follow Each function must set up and maintain its own data structures as needed Some function definitions perform no action and should just return De
272. iption of a function or macro see the indicated page A superscripted number is used in the following descriptions to show expo nents For example xY is the equivalent of x to the power y Run Time Support Functions 9 25 Summary of Run Time Support Functions and Macros Table 9 3 Summary of Run Time Support Functions and Macros a Error message macro assert h cassert Macro void assert int expr Description Inserts diagnostic messages into programs b Character typing and conversion functions ctype h cctype Function int isalnum int c int isalpha int c int isascii int c int isentrl int c int isdigit int c int isgraph int c int islower int c int isprint int c int ispunct int c int isspace int c int isupper int c int isxdigit int c char toascii int c char tolower int char c char toupper int char c Description Tests c to see if it is an alphanumeric ASCll character Tests c to see if it is an alphabetic ASCII character Tests c to see if it is an ASCII character Tests c to see if it is a control character Tests c to see if it is a numeric character Tests c to see if it is any printing character except a space Tests c to see if it is a lowercase alphabetic ASCII charcter Tests c to see if it is a printable ASCII character including a space Tests c to see if it is an ASCII punctuation character Tests c to see if it is an ASCII space bar tab h
273. iptions of their effects a e global_symbol f fill_ value g global_symbol h heap size i directory l libraryname Produces an absolute executable module This is the default if neither a nor r is specified the linker acts as if a is specified Produces a relocatable executable object module Disables merge of symbolic debugging information Autoinitializes variables at run time See section 8 8 4 on page 8 51 for more information Initializes variables at load time See section 8 8 5 on page 8 52 for more information Defines a global_symbol that specifies the primary entry point for the output module Sets the default fill value for null areas within output sections fill_value is a 32 bit constant Defines global_symbol as global even if the global symbol has been made static with the h linker option Makes all global symbols static Sets the heap size for dynamic memory allocation to size bytes and defines a global symbol that specifies the heap size The default is 1K bytes Alters the library search algorithm to look in directory before looking in the default location This option must appear before the linker option The directory must follow operating system conventions You can specify up to eight i options Disables conditional linking that has been set up with the assembler clink directive By default all sections are unconditionally linked lower case L Names a
274. irectives Summary Syntax Description Restrictions Page call ret_reg func_name arg1 arg2 Calls a function Valid only within procedures 4 17 label cproc variable variables Start a C C call Must use with endproc 4 19 able procedure endproc End a C C callable Must use with cproc 4 19 procedure endproc register registers End a procedure Must use with proc cannot use vari 4 26 ables in the register parameter mdep symbo 7 symbol2 Indicates a memory Valid only within procedures 4 22 dependence mptr register symbol base offset Avoid memory bank Valid only within procedures canuse 4 23 stride conflicts variables in the register parameter no_mdep No memory aliases in Valid only within procedures 4 25 the function label proc register registers Start a procedure Must use with endproc cannot use 4 26 variables in the register parameter reg variable variables Declare variables Valid only within procedures 4 28 return argument Return value to Valid only within cproc procedures 4 31 procedure reserve register registero Reserve register use 4 30 label trip min hea trip count Valid only within procedures 4 32 4 16 Syntax Description Calls a Function call call ret_reg func_name arg1 arg2 Use the call directive to call a function Optionally you may specify a register that is assigned the result of the call The r
275. isplays a mes sage in the following format file c line n diagnostic severity diagnostic message file c The name of the file involved line n The line number where the diagnostic applies diagnostic severity The severity of the diagnostic message a description of each severity category follows diagnostic message The text that describes the problem Diagnostic messages have an associated severity as follows J A fatal error indicates a problem of such severity that the compilation can not continue Examples of problems that can cause a fatal error include command line errors internal errors and missing include files If multiple source files are being compiled any source files after the current one will not be compiled J An error indicates a violation of the syntax or semantic rules of the C C language Compilation continues but object code is not generated Awarning indicates something that is valid but questionable Compilation continues and object code is generated if no errors are detected _ Aremarkis less serious than a warning Itindicates something thatis valid and probably intended but may need to be checked Compilation contin ues and object code is generated if no errors are detected By default remarks are not issued Use the pdr shell option to enable remarks Diagnostics are written to standard error with a form like the following example test c line 5 error a break st
276. isupper function 9 67 isxdigit function 9 67 isxxx function 9 14 j linker option 5 6 jmp_buf datatype 9 19 jump function 9 30 jump macro 9 30 jumps nonlocal functions 9 85 Index 10 k shell option 2 16 k library build utility option 10 4 11 2 K amp R compatibility with ANSI C 7 34 related document vi K amp R C defined A 5 kernel defined A 5 described 3 4 keyword const 7 7 cregister 7 8 far 7 11 to 7 13 inline 2 38 interrupt 7 10 near 7 11 to 7 13 restrict 7 14 volatile 7 15 l option library build utility 10 3 linker 5 2 5 8 L_tmpnam macro 9 20 label case sensitivity 2 22 defined A 5 retaining 2 22 labs function 9 37 large memory model 2 16 8 6 _LARGE_MODEL macro 2 24 LARGE_MODEL_OPTION macro 2 24 Idexp function 9 69 Idiv function 9 54 Idiv_tdatatype 9 21 libraries run time support 9 2 to 9 3 library build utility 10 1 to 10 6 compiler and assembler options 10 5 to 10 6 described 1 4 optional object library 10 3 options 10 4 to 10 6 limits floating point types 9 17 integer types 9 16 limits h header 9 16 to 9 17 __LINE__ macro 2 25 linear assembly defined A 5 described 4 1 source comments 4 6 specifying functional units 4 6 writing 4 4 to 4 15 linkage h header 9 18 linker command file 5 13 controlling 5 8 defined A 5 described 1 3 disabling 5 5 invoking 2 17 invoking individually 5 2 options 5 6 to 5 7 summary of options 2 14 suppressing 2 15 linking C C
277. its ANSI 3 1 3 4 K amp R A2 5 2 1 Character constants with multiple characters are encoded as the last character in the sequence For example abo Cc ANSI 3 1 3 4 K amp R A2 5 2 7 1 2 Data Types 7 1 3 Conversions 7 1 4 Expressions d Characteristics of TMS320C6000 C For information about the representation of data types see section 7 3 on page 7 6 ANSI 3 1 2 5 K amp R A4 2 The type size_t which is the result of the sizeof operator is unsigned int ANSI 3 3 3 4 K amp R A7 4 8 The type ptrdiff_t which is the result of pointer subtraction is int ANSI 3 3 6 K amp R A7 7 Float to integer conversions truncate toward 0 ANSI 3 2 1 3 K amp R A6 3 Pointers and integers can be freely converted ANSI 3 3 4 K amp R A6 6 When two signed integers are divided and either is negative the quo tient is negative and the sign of the remainder is the same as the sign of the numerator The slash mark is used to find the quotient and the per cent symbol is used to find the remainder For example 0 3 3 10 3 3 0 3 1 10 3 1 ANSI 3 3 5 K amp R A7 6 A signed modulus operation takes the sign of the dividend the first oper and A right shift of a signed value is an arithmetic shift that is the sign is preserved ANSI 3 3 7 K amp R A7 8 TMS320C6000 C C Language Implementation 7 3 Characteristics of TMS320C6000 C 7 1 5 Declarations
278. ized 8 3 section header defined A 8 sections created by the compiler 5 11 SEEK_CUR macro 9 21 SEEK_END macro 9 21 SEEK_SET macro 9 21 set file position functions fseek function 9 64 fsetpos function 9 64 set_new_handler function 9 24 setbuf function 9 84 setjmp macro 9 19 9 85 Index 16 setjmp h header described 9 19 summary of functions and macros 9 30 setvbuf function 9 86 shell program defined A 8 described 1 3 diagnostic options 2 31 to 2 32 frequently used options 2 15 to 2 18 invoking 2 4 options assembler 2 13 compiler 2 7 input file extension 2 8 input files 2 8 linker 2 14 optimizer 2 12 output files 2 9 parser 2 10 type checking 2 9 overview 2 2 preprocessor options 2 27 to 2 28 shift 7 3 signed integer and fraction functions 9 77 SIMD using _nassert to enable 8 35 sin function 9 87 sine functions 9 87 sinf function 9 87 sinh function 9 87 sinhf function 9 87 size_t 7 3 size_t data type 9 20 small memory model 8 6 _SMALL_MODEL macro 2 24 software development tools overview 1 2 to 1 4 software pipelining assembly optimizer code 4 4 C code 3 4 defined A 8 description 3 4 to 3 15 disabling 3 5 information 3 5 sort array function 9 80 source file defined A 8 extensions 2 19 specifying functional units in linear assembly 4 6 sprintf function 9 88 sqrt function 9 88 sqrtf function 9 88 square root functions 9 88 srand function 9 81 ss shell option 2 17 3 30 sscanf function 9 88 stack poin
279. ker command The linker also creates a global symbol __SYSMEM_SIZE and assigns it a value equal to the size of the heap in bytes The default size is 0x400 bytes For more information on the heap option see section 5 4 Linker Options on page 5 6 Dynamically allocated objects are not addressed directly they are always accessed with pointers and the memory pool is in a separate section sys mem therefore the dynamic memory pool can have a size limited only by the amount of available memory in your system To conserve space in the bss section you can allocate large arrays from the heap instead of defining them as global or static For example instead of a definition such as struct big table 100 use a pointer and call the malloc function struct big table table struct big malloc 100 sizeof struct big Run Time Environment 8 5 Memory Model 8 1 4 Initialization of Variables The C C compiler produces code that is suitable for use as firmware in a ROM based system In such a system the initialization tables in the cinit sec tion are stored in ROM At system initialization time the C C boot routine copies data from these tables in ROM to the initialized variables in bss RAM In situations where a program is loaded directly from an object file into memory and run you can avoid having the cinit section occupy space in memory A loader can read the initialization tables directly from the object file in
280. l filenames see section 2 3 3 on page 2 19 For information about how you can alter the way that the shell interprets and names the extensions of as sembly source and object files see section 2 3 5 on page 2 21 You can use wildcard characters to compile or assemble multiple files Wild card specifications vary by system use the appropriate form listed in your op erating system manual For example to compile all of the files in a directory with the extension cpp enter the following cl6x cpp Note No Default Extension for Source Files is Assume If you list a filename called example on the command line the compiler assumes that the entire filename is example not example c No default extensions are added onto files that do not contain an extension ss Changing the Compiler s Behavior With Options 2 3 3 Changing How the Shell Program Interprets Filenames fa fc fg fl fo and fp Options You can use options to change how the shell interprets your filenames If the extensions that you use are different from those recognized by the shell you can use the fa fc fl fo and fp options to specify the type of file You can insert an optional space between the option and the filename Select the appropriate option for the type of file you want to specify fafilename for an assembly language source file fcfilename for a C source file flfilename for a linear assembly file fofilename fo
281. l the new object file or files into the library For example cl6x options atoi c strcpy c recompile ar6x r rts6200 lib atoi obj strcepy obj rebuild library You can also build a new library this way rather than rebuilding into rts6200 lib For more information about the archiver see the TMS320C6000 Assembly Language Tools User s Guide 9 1 3 Building a Library With Different Options You can create a new library from rts src by using the library build utility mk6x For example use this command to build an optimized run time support library mk6x u o2 x rts sre l rts lib The u option tells the mk6x utility to use the header files in the current direc tory rather than extracting them from the source archive The use of the o2 option does not affect compatibility with code compiled without this option For more information on the library build utility see Chapter 10 Library Build Utility Run Time Support Functions 9 3 The C I O Functions 9 2 The C I O Functions 9 4 The C I O functions make it possible to access the host s operating system to perform I O The capability to perform I O on the host gives you more options when debugging and testing code To use the I O functions include the header file stdio h or cstdio for C code for each module that references a C I O function For example given the following C program in a file named main c include lt stdio h gt main FILE fid
282. laced in the return unsigned _packh2 unsigned src PACKH2 value unsigned src2 unsigned _packh 4 unsigned src1 PACKH4 Packs alternate bytes into return C6400 unsigned src2 value Can pack high or low bytes unsigned _packl4 unsigned src1 PACKL4 unsigned src2 unsigned _packhl2 unsigned src1 PACKHL2 The upper lower halfword of srci is C6400 unsigned src2 placed in the upper halfword the re turn value The lower upper halfword unsigned packih2 unsigned srel PAGR THA of src2 is placed in the lower halfword unsigned src2 the return value T Instructions not specified with a device apply to all C6000 devices See the 7ms320C6000 Programmer s Guide for more information See section 8 5 3 Using Unaligned Data and 64 Bit Values for details on manipulating 8 byte data quantities Run Time Environment 8 31 Interfacing C and C With Assembly Language Table 8 3 TMS320C6000 C C Compiler Intrinsics Continued Assembly C C Compiler Intrinsic Instruction Description Devicet double _rcpdp double src RCPDP Computes the approximate 64 bit C6700 double reciprocal float _rcpsp float src RCPSP Computes the approximate 32 bit C6700 float reciprocal uint _rotl uint src7 uint src2 ROTL Rotates src2 to the left by the amount C6400 in src1 double _rsqrdp double src RSQRDP Computes the approximate 64 bit C6700 double square root reciprocal float _rsqrsp float src RSQRSP Computes the
283. language source file COFF See common object file format command file A file that contains linker or hex conversion utility options and names input files for the linker or hex conversion utility comment A source statement or portion of a source statement that docu ments or improves readability of a source file Comments are not com piled assembled or linked they have no effect on the object file common object file format COFF A system of object files configure ac cording to a standard developed by AT amp T These files are relocatable in memory space Glossary constant A type whose value cannot change cross reference listing An output file created by the assembler that lists the symbols it defined what line they were defined on which lines refer enced them and their final values data section One of the default COFF sections The data section is an in itialized section that contains initialized data You can use the data direc tive to assemble code into the data section direct call A function call where one function calls another using the func tion s name directives Special purpose commands that control the actions and functions of a software tool disambiguation See alias disambiguation dynamic memory allocation A technique used by several functions Such as malloc calloc and realloc to dynamically allocate memory for vari ables at run time This is accomplished by defining a large m
284. le The following example assembles the file fit rrr and creates an object file named fit o cl6x ea rrr eo o fit rrr The period in the extension and the space between the option and the extension are optional You can also write the example above as cl6 x earrr eoo fit rrr Changing the Compiler s Behavior With Options 2 3 5 Specifying Directories fb ff fr fs and ft Options By default the shell program places the object assembly and temporary files that it creates into the current directory If you want the shell program to place these files in different directories use the following options fbdirectory ffdirectory frdirectory fsdirectory ftdirectory Specifies the destination directory for absolute listing files The default is to use the same directory as the object file directory To specify an absolute listing file directory type the directory s pathname on the command line after the fb option cl6x fb d abso_list Specifies the destination directory for assembly listing files and cross reference listing files The default is to use the same directory as the object file directory To specify an assembly cross reference listing file directory type the direc tory s pathname on the command line after the ff option cl6x ff d listing Specifies a directory for object files To specify an object file directory type the directory s pathname on the commandli
285. led A solution to this problem is to write a dot product routine that cannot have memory hits This would eliminate the need for the arrays to use different memory banks If the dot product loop kernel is unrolled once then four LDW instructions execute in the loop kernel Assuming that nothing is known about the bank alignment of arrays a and b except that they are word aligned the only safe assumptions that can be made about the array accesses are that a 0 1 cannot conflict with a 2 3 and that b 0 1 cannot conflict with b 2 3 Example 4 12 shows the unrolled loop kernel Using the Assembly Optimizer 4 39 Avoiding Memory Bank Conflicts With the Assembly Optimizer Example 4 12 Dot Product From Example 4 10 Unrolled to Prevent Memory Bank Conflicts _dotp2 cproc reg reg ADD ADD MVK ZER Z O RO m m mptr mptr mptr mptr LDW LDW MPY MP YH ADD ADD LDW LDW MPY MP YH ADD ADD i ADD fi B ADD loop CREP 50 a_0 b0 a_4 b_4 sum vall val2 prodl 4 A4 a_4 4 B4 b_4 25 i i 100 4 suml i prod2 sum0 multiply result suml multiply result at0 8 at4 8 0 0 8 4 8 Tow w _0 _4 0 4 Too i a_O 2 vall b_0 2 val2 vall val2 prodl1 vall val2 prod2 prodl sum0 sum0 prod2 suml1 suml a_4 2 vall b_44 4 2 val2 vall val2 prodl vall val2 prod2 prodl sum0 sum0 prod2 suml1 suml ley a N loop
286. ll header files in a directory and to create custom li braries from source archives 10 1 Standard Run Time Support Libraries essnee anaana 10 2 10 2 Invoking the Library Build Utility 0 eee eee 10 3 10 3 Library Build Utility Options 0 000 c eee eee eee 10 4 10 4 Options Summary sssaaa cece ene teen eens 10 5 C Name Demangler 00c cece e eee eee eee eee 11 1 Describes the C name demangler and tells you how to invoke and use it 11 1 Invoking the C Name Demangler 0000 eee eee eee 11 2 11 2 C Name Demangler Options 0 0 cece teens 11 2 11 3 Sample Usage of the C Name Demangler 0 00 cece eee eens 11 3 GOSS aN Yy ais ae ise ic E Scores a N epee ef a etre Seale stele eee eee ie A 1 Defines terms and acronyms used in this book Contents xiii Figures I tod i ea ae et eee ONG ee Orta ess eel Tope eo he ee oe oe I N xiv TMS320C6000 Software Development Flow 00 cece eee ene 1 2 The Shell Program Overview 0 0 c cece nent teen eens 2 3 Compiling a C C Program With the Optimizer 000s eee eee eee 3 2 Software Pipelined LOOP ccc eect een eee teen eens 3 4 4 Bank Interleaved Memory 000 cece teen eens 4 34 4 Bank Interleaved Memory With Two Memory Spaces 002 000eeeeeeee 4 35 Char and Short Data Storage Format 00 00 cece eee e eee 8 9 32 Bi
287. lls the function child Upon returning the caller reclaims any stack space needed for arguments by adding to the stack pointer This step is needed only in assembly pro grams that were not compiled from C C code This is because the C C compiler allocates the stack space needed for all calls at the begin ning of the function and deallocates the space at the end of the function 8 4 2 How a Called Function Responds A called function child function must perform the following tasks 1 The called function child allocates enough space on the stack for any local variables temporary storage areas and arguments to functions that this function might call This allocation occurs once at the beginning of the function and may include the allocation of the frame pointer FP The frame pointer is used to read arguments from the stack and to handle register spilling instructions If any arguments are placed on the stack or if the frame size exceeds 128K bytes the frame pointer A15 is allocated in the following manner a The old A15 is saved on the stack b The new frame pointer is set to the current SP B15 Run Time Environment 8 19 Function Structure and Calling Conventions 8 20 c The frame is allocated by decrementing SP by a constant d Neither A15 FP nor B15 SP is decremented anywhere else within this function If the above conditions are not met the frame pointer A15 is not allo cated In this situa
288. lls the linker to set the C heap size at 0x2000 bytes stack Tells the linker to set the stack size to 0x0100 bytes l Tells the linker to use an archive library file rts6200 lib for input To link the program use the following syntax Ink6x object_file s o outfile m mapfile Ink cmd The MEMORY and possibly the SECTIONS directives might require modifica tion to work with your system See the TMS320C6000 Assembly Language Tools User s Guide for more information on these directives Example 5 1 Sample Linker Command File zg heap 0x2000 stack 0x0100 1l rts6200 1lib MEMORY ECS 0 EM EM fe 00000000h 1 00000400h 80000000h 1 00400h reset amp interrupt vectors EJ OFCOOh intended for initialization 10000h bss sysmem stack cinit Wougs O if a tou n ECTIONS n vectors etext tables data stack bss sysmem CINIC CoOnst cio far WWWWWWodododdve AHA ARPA VVVVVVVV VV NV Linking C C Code 5 13 Controlling the Linking Process 5 5 7 Using Function Subsections mo Shell Option 5 14 When the linker places code into an executable file it allocates all the functions in a single source file as a group This means that if any function in a file needs to be linked into an executable then all the functions in the file are linked in This can be undesirable if a file contains many function
289. loat asinhf float x define TIENHANCED_MATH_H 1 include lt cmath gt double std asinh double x float std asinhf float x asinh c and asinhf c in rts src The asinh and asinhf functions return the hyperbolic arc sine of a floating point number x A range error occurs if the magnitude of the argument is too large Insert Diagnostic Information Macro include lt assert h gt void assert int expr include lt cassert gt void std assert int expr assert h cassert as macro The assert macro tests an expression depending upon the value of the expression assert either issues a message and aborts execution or continues execution This macro is useful for debugging _j Ifexpris false the assert macro writes information about the call that failed to the standard output device and aborts execution Li If expr is true the assert macro does nothing The header file that defines the assert macro refers to another macro NDEBUG If you have defined NDEBUG as a macro name when the assert h header is included in the source file the assert macro is defined as define assert ignore The header file that defines the assert macro refers to another macro NASSERT If you have defined NASSERT as amacro name when the assert h header is included in the source file the assert macro behaves as if itis a call to the _nassert intrinsic Example atan atanf Syntax for C Syntax for C Defined in Description Exam
290. lowing path usr include sys proc h ASS AAAA 2 5 3 Generating a Preprocessed Listing File ppo Option The ppo option allows you to generate a preprocessed version of your source file with an extension of pp The compiler s preprocessing functions perform the following operations on the source file i Each source line ending in a backslash is joined with the following line Trigraph sequences are expanded Comments are removed include files are copied into the file Macro definitions are processed All macros are expanded ovo All other preprocessing directives including line directives and condi tional compilation are expanded 2 5 4 Continuing Compilation After Preprocessing ppa Option If you are preprocessing the preprocessor performs preprocessing only By default it does not compile your source code If you want to override this fea ture and continue to compile after your source code is preprocessed use the ppa option along with the other preprocessing options For example use ppa with ppo to perform preprocessing write preprocessed output to a file with a pp extension and then compile your source code Using the C C Compiler 2 27 Controlling the Preprocessor 2 5 5 2 5 6 2 5 7 2 5 8 2 28 Generating a Preprocessed Listing File With Comments ppc Option The ppc option performs all of the preprocessing functions except removing comments and
291. m 0 Kel Run Time Support Functions 9 95 strncmp Syntax for C Syntax for C Defined in Description Example 9 96 Compare Strings include lt string h gt int strncmp const char string1 const char string2 size_t n include lt cstring gt int std strncmp const char string1 const char string2 size_t n strncmp c in rts src The strncmp function compares up to n characters of string2 with string1 The function returns one of the following values lt 0 if string1 is less than string2 0 if string1 is equal to string2 gt 0_ if string1 is greater than string2 char stra why ask why char strb just do it char stre why not size_t size 4 if strcmp stra strb size gt 0 statements her xecut Ff if strcomp stra strc size 0 statements her xecute also strncpy String Copy Syntax for C include lt string h gt char strncpy register char dest register const char src register size_t n Syntax for C include lt cstring gt char strncpy register char dest register const char src register size_t n Defined in strncpy c in rts src Description The strncpy function copies up to n characters from src into dest If src is n characters long or longer the null character that terminates src is not copied If you attempt to copy characters from overlapping strings the function s behavior is undefine
292. m the run time support library J The cinit output section is padded with a termination record so that the loader load time initialization or the boot routine run time initialization knows when to stop reading the initialization tables Controlling the Linking Process LJ When using initializing at load time the cr linker option the following occur m The linker sets the symbol cinit to 1 This indicates that the initializa tion tables are not in memory so no initialization is performed at run time m TheSTYP_COPY flag is set in the cinit section header STYP_COPY is the special attribute that tells the loader to perform autoinitialization directly and not to load the cinit section into memory The linker does not allocate space in memory for the cinit section LJ When autoinitializing at run time c linker option the linker defines the symbol cinit as the starting address of the cinit section The boot routine uses this symbol as the starting point for autoinitialization 5 5 5 Specifying Where to Allocate Sections in Memory The compiler produces relocatable blocks of code and data These blocks called sections are allocated in memory in a variety of ways to conform to a variety of system configurations The compiler creates two basic kinds of sections initialized and uninitialized Table 5 1 summarizes the sections Table 5 1 Sections Created by the Compiler a Initialized sections Name Contents
293. m0 suml sum 4 a0 a4 4 b0 b4 100 cnt sum0 suml xa_0 2 vala load a 0 1 b_0 2 valB load b 0 1 valA valB prodl a 0 b 0 valA valB prod2 a l b 1 prodl prod2 tmp sum0 a 0 b 0 tmp sum0 sum0 a 1 a 1 qa 4 2 vala load a 2 3 h 44 2 gt vals Load b 2 3 valA valB prod3 a 2 b 2 valA valB prod4 a 3 b 3 prod3 prod4 tmp suml a 0 b 0 tmp suml suml a l a 1 enty 4 Cnt ent 4 loop if 0 goto loop sum0 suml sum compute final result sum What You Need to Know to Write Linear Assembly The assembly optimizer generates the software pipeline kernel shown in Example 4 3 for the hand coded program in Example 4 2 Example 4 3 Software Pipeline Kernel for Computing a Dot Product With Example 4 2 loop PIPED LOOP KERNEL MV L2X AO B9 Define a twin register BO B Si loop 31 if 0 goto loop MV L1X B1 A7 Define a twin register A2 LDW D2T2 B6 8 B8 23 load a 2 3 A2 LDW D1T1 A6 8 A4 24 load b 2 3 A2 SUB S1 A2 4 A2 ADD L1X B7 A0O AO 27 sumi ADD L2 B9 B8 B7 20 sum0O a MPYH M2X A4 B1 B8 19 a l b 1 MPY M1 A4 A7 A0 18 a 0 b O Al LDW D2T2 B5 8 Bl 17 load b 0 1 B2 SUB L2 B2 1 B2 Al SUB L1 Al 4 Al B2 ADD S1 AO A3 A3 28 a 1 a 1 B2 ADD D2 B7 B4 B4 21
294. macro 9 21 tmpfile function 9 103 tmpnam function 9 103 _TMS320C6200 macro 2 24 _TMS320C6400 macro 2 24 _TMS320C6700 macro 2 24 _TMS320C6X macro 2 24 toascii function 9 104 tokens 9 101 tolower function 9 104 toupper function 9 104 trigonometric math function 9 18 trigraph sequence defined A 9 trip count defined A 9 described 3 16 trip directive 4 32 trunc function 9 105 truncate functions 9 105 truncf function 9 105 type_info structure 9 24 typeinfo header 9 24 u library build utility option 10 4 11 2 u option linker 5 7 shell 2 17 undefining aconstant 2 17 ungetc function 9 105 unguarded definition controlled inlining 2 37 uninitialized sections allocating in memory 5 11 defined A 9 list 8 3 unlink I O function 9 10 UNROLL pragma 7 31 unsigned defined A 9 using unaligned data and 64 bit vaules 8 35 utilities overview 1 7 v library build utility option 10 4 11 2 va_arg macro 9 19 9 106 va_endmacro 9 19 9 106 va_list datatype 9 19 va_start macro 9 19 9 106 variable argument macros described 9 19 summary of 9 30 variable argument macros usage 9 106 variables accessing assembler variables from C 8 39 accessing local variables 8 21 autoinitialization 8 46 compiling register variables 7 16 defined A 9 initializing global 7 33 static 7 33 vfprintf function 9 107 volatile keyword 7 15 vprintf function 9 107 vsprintf function 9 108 Index w linker option 5 7 warning messages 2 29 wild
295. mbly Language Tools User s Guide Topic Page 5 1 Invoking the Linker as an Individual Program 000 5 2 5 2 Invoking the Linker With the Compiler Shell z Option 5 4 5 3 Disabling the Linker c Shell Option 000eeeeeee 5 5 5 4 LinkeriOptions onic eee neni ea sr enerne oe eee er pate Sere yee 5 6 5 5 Controlling the Linking Process 0ceeeeeeeeee eee eee 5 8 5 1 Invoking the Linker as an Individual Program 5 1 Invoking the Linker as an Individual Program This section shows how to invoke the linker in a separate step after you have compiled and assembled your programs This is the general syntax for linking C C programs in a separate step Ink6x c cr filenames options o name out I libraryname Ink cma Ink6x The command that invokes the linker c cr Options that tell the linker to use special conventions defined by the C C environment When you use Ink6x you must use c or cr The c option uses auto matic variable initialization at run time the cr option uses variable initialization at load time filenames Names of object files linker command files or archive libraries The default extension for all input files is obj any other extension must be explicitly specified The linker can determine whether the input file is an object or ASCII file that contains linker commands The default output filename is a out unless you use the
296. me is the current name of the file Lj The new_name is the new name for the file The function returns one of the following values 0 if successful Non 0 if not successful Run Time Support Functions _j The count is the number of characters to read from the device or file Lj The file_descriptor is the stream number assigned by the low level rou L The buffer is the location of the buffer where the read characters are 9 9 unlink Syntax for C Syntax for C Description Return Value Syntax for C Syntax for C Description Return Value Delete File include lt stdio h gt include lt file h gt int unlink char path include lt cstdio gt include lt file h gt int std unlink char path The unlink function deletes the file specified by path The path is the filename of the file to be opened including path information The function returns one of the following values 0 if successful 1 if not successful Write Characters to Buffer include lt stdio h gt include lt file h gt int write int file_descriptor char buffer unsigned count include lt cstdio gt include lt file h gt int write int file_descriptor char buffer unsigned count The write function writes the number of characters specified by countfrom the buffer to the device or file associated with file_descriptor Lj The file_descriptor is the stream number assigned by the low level rou tines I
297. mes an alternate directory that contains include files The for mat of the i option is i directory i directory2 You can use up to 32 i options per invocation of the compiler each i option names one directory In C source you can use the include directive without specifying any directory information for the file instead you can specify the directory information with the i option For example assume that a file called source c is in the current directory The file source c contains the following directive statement include alt h Assume that the complete pathname for alt h is UNIX 6xtools files alt h Windows _ c 6xtools files alt h The table below shows how to invoke the compiler Select the command for your operating system Operating System Enter UNIX cl6x i 6xtools files source c Windows cl6x ic 6xtools files source c Controlling the Preprocessor Note Specifying Path Information in Angle Brackets If you specify the path information in angle brackets the compiler applies that information relative to the path information specified with i options and the C_DIR or C6X_C_DIR environment variable For example if you set up C_DIR with the following command setenv C_DIR usr include usr ucb or invoke the compiler with the following command cl6x i usr include file c and file c contains this line include lt sys proc h gt the result is that the included file is in the fol
298. mpiles and links r eLo CEG only compiles Ske eds 2 Inkscmd compiles and links using a command file cl6x c c z Ink cmd only compiles c overrides z For more information about shell options see section 2 3 Changing the Compiler s Behavior With Options on page 2 6 For more information about linker options see section 5 4 Linker Options on page 5 6 Using the C C Compiler 2 23 Controlling the Preprocessor 2 5 Controlling the Preprocessor This section describes specific features that control the C6000 preprocessor which is part of the parser A general description of C preprocessing is in sec tion A12 of K amp R The C6000 C C compiler includes standard C C prepro cessing functions which are built into the first pass of the compiler The prepro cessor handles _j Macro definitions and expansions include files E J Conditional compilation E Various other preprocessor directives specified in the source file as lines beginning with the character The preprocessor produces self explanatory error messages The line number and the filename where the error occurred are printed along with a diagnostic message 2 5 1 Predefined Macro Names The compiler maintains and recognizes the predefined macro names listed in Table 2 2 Table 2 2 Predefined Macro Names Macro Name Description _TMS320C6X Always defined _TMS320C6200 Defined if target is 6200 _TMS320C6400 Defined if target is
299. n C C code O A register pair of the format hi lo implies a cproc region that has a 40 bit return value or a 64 bit type double for C6700 similar to a long function in C C code Arguments to the return directive can be either symbolic register names or machine register names All return statements in a cproc region must be consistent in the type of the return value It is not legal to mix a return arg with a return hi lo in the same cproc region The return directive is unconditional To perform a conditional return simply use a conditional branch around a return The assembly optimizer removes the branch and generates the appropriate conditional code For example to return if condition cc is true code the return as cc B around return around This example uses a symbolic register name tmp and a machine register A5 as return arguments Cproc reg tmp return tmp lt legal symbolic name return a5 lt legal actual name Using the Assembly Optimizer 4 31 trip Specify Trip Count Values Syntax Description 4 32 label _ trip minimum value maximum value factor The trip directive specifies the value of the trip count The trip count indicates how many times a loop iterates The trip directive is valid within procedures only Following are descriptions of the trip directive parameters label The label represents the beginning of the loop This is a required p
300. n allows you to profile optimized code at the granularity of functions When you combine the g or gw option and the o option with the gp option all of the line directives are removed except for the first one and the last one a Z Note Profile Points In Code Composer Studio when gp is used profile points can only be set at the beginning and end of functions ee __ _ gt SS ee Note Finer Grained Profiling If you need to profile code at a finer grain that the function level in Code Com poser Studio you can use the g or gw option instead of the gp option although this is not recommended You might see a significant performance degradation because the compiler cannot use all optimizations with g It is recommended that outside of Code Composer Studio you use the clock function SS Ss sss sss What Kind of Optimization Is Being Performed 3 13 What Kind of Optimization Is Being Performed The TMS320C6000 C C compiler uses a variety of optimization techniques to improve the execution speed of your C C programs and to reduce their size Following are the optimizations performed by the compiler Optimization Page Cost based register allocation 3 36 Alias disambiguation 3 38 Branch optimizations and control flow simplification 3 38 Data flow optimizations 3 41 Copy propagation Common subexpression elimination _ Redundant assignment elimination Expres
301. n alter the severity of discretionary diagnostics only Categorizes the diagnostic identified by num as a warning To determine the numeric identifier of a diagnostic message use the pden option first in a separate compile Then use pdsw num to recategorize the diagnostic as a warning You can alter the severity of discretionary diagnostics only Using the C C Compiler 2 31 Understanding Diagnostic Messages pdv Provides verbose diagnostics that display the original source with line wrap and indicate the position of the error in the source line pdw Suppresses warning diagnostics errors are still issued 2 6 2 How You Can Use Diagnostic Suppression Options 2 32 The following example demonstrates how you can control diagnostic mes sages issued by the compiler Consider the following code segment int one int i int main switch i case 1 return one break default return 0 break If you invoke the compiler with the q option this is the result err c line 9 warning statement is unreachable err c line 12 warning statement is unreachable Because it is standard programming practice to include break statements at the end of each case arm to avoid the fall through condition these warnings can be ignored Using the pden option you can find out the diagnostic identifi er for these warnings Here is the result ferr c err c line 9 warning 111 D statement is unrea
302. n archive library file or linker command filename as linker input The ibraryname is an archive library name and must follow operating system conventions m filename n o filename q r S stack size u symbol W X Linker Options Produces a map or listing of the input and output sec tions including null areas and places the listing in file name The filename must follow operating system conventions Enables function subsections Ignores all fill specifications in memory directives Use this option in the development stage of a project to avoid generating large out files which can result from using memory directive fill specifications Names the executable output module The filename must follow operating system conventions If the o option is not used the default filename is a out Requests a quiet run suppresses the banner Retains relocation entries in the output module Strips symbol table information and line number en tries from the output module Sets the C C system stack size to size bytes and defines a global symbol that specifies the stack size The default is 1K bytes Places the unresolved external symbol symbol into the output module s symbol table Displays a message when an undefined output sec tion is created Forces rereading of libraries Resolves back refer ences For more information on linker options see the Linker Description chapter in the TMS320
303. n page 9 22 cos cosf Syntax for C Syntax for C Defined in Description Example cosh coshf Syntax for C Syntax for C Defined in Description Example cosh coshf Cosine include lt math h gt double cos double x float cosf float x include lt cmath gt double std cos double x float std cosf float x cos c and cosf c in rts src The cos and cosf functions return the cosine of a floating point number x The angle x is expressed in radians An argument with a large magnitude might produce a result with little or no significance double radians cval radians 0 0 cval cos radians cval 0 0 Hyperbolic Cosine include lt math h gt double cosh double x float coshf float x include lt cmath gt double std cosh double x float std coshf float x cosh c and coshf c in rts src The cosh and coshf functions return the hyperbolic cosine of a floating point number x A range error occurs errno is set to the value of EDOM if the magnitude of the argument is too large These functions are equivalent to eX eX 2 but are computationally faster and more accurate double x y x Yy Qas cosh x return value 1 0 Run Time Support Functions 9 51 cot cotf cot cotf Syntax for C Syntax for C Defined in Description coth cothf Syntax for C Syntax for C Defined in Description 9 52 Polar Cotangent de
304. name Run Time Support Functions 9 103 toascii Syntax for C Syntax for C Defined in Description tolower toupper Syntax for C Syntax for C Defined in Description 9 104 Convert to ASCII include lt ctype h gt char toascii int c include lt cctype gt char std toascii int c toascii c in rts src The toascii function ensures that c is a valid ASCII character by masking the lower seven bits There is also an equivalent macro call _toascii Convert Case include lt ctype h gt char tolower int c char toupper int c include lt cctype gt char std tolower int c char std toupper int c tolower c and toupper c in rts src Two functions convert the case of a single alphabetic character c into upper case or lowercase Lj The tolower function converts an uppercase argument to lowercase If c is already in lowercase tolower returns it unchanged _j The toupper function converts a lowercase argument to uppercase If c is already in uppercase toupper returns it unchanged The functions have macro equivalents named _tolower and _ toupper trunc truncf Syntax for C Syntax for C Defined in Description Example Syntax for C Syntax for C Defined in Description ungetc Truncate Toward 0 define _TI_ ENHANCED_MATH_H 1 include lt math h gt double trunc double x float truncf float x define TlENHANCED_MATH_H 1 include lt cmath g
305. nctions 9 77 pow powf pow powf Syntax for C Syntax for C Defined in Description Example powi powif Syntax for C Syntax for C Defined in Description 9 78 Raise to a Power include lt math h gt double pow double x double y float powf float x float y include lt cmath gt double std pow double x double y float std powf float x float y pow c and powf c in rts src The pow and powf functions return x raised to the power y These pow func tions are equivalent mathematically to exp y x log x but are faster and more accurate A domain error occurs if x 0 and y lt 0 or if x is negative and y is not an integer A range error occurs if the result is too large to represent double x Y Z x y x 2 0 3 0 pow x y return value 8 0 Raise to an Integer Power define TIENHANCED_MATH_H 1 include lt math h gt double powi double x int y float powif float x int y define TIENHANCED_MATH_H 1 include lt cmath gt double std powi double x int y float std powif float x int y powi c and powif c in rts src The powi and powif functions return x These powi functions are equivalent mathematically to pow x double i but are faster and have similar accuracy A domain error occurs if x 0 andi lt 0 or if x is negative and i is not an integer A range error occurs if the result is too large to represent Syntax for C Syntax for C
306. nd ft Options 2 21 2 3 6 Options That Control the Assembler 0 0 00 cece eee eee ees 2 22 Setting Default Shell Options C_OPTION and C_C6X_OPTION 2 23 Controlling the Preprocessor 00 cece eee eee eee enna 2 24 2 5 1 Predefined Macro Names 0 cece cette eee 2 24 2 5 2 The Search Path for include Files 0 0 c cece eee eee eee 2 25 2 5 3 Generating a Preprocessed Listing File ppo Option 2 27 2 5 4 Continuing Compilation After Preprocessing ppa Option 2 27 2 5 5 Generating a Preprocessed Listing File With Comments ppc Option 2 28 2 5 6 Generating a Preprocessed Listing File With Line Control Information FPO ODIOM eren ca kde yaad Suwa saat ee ee dead wee aad Pee alates 2 28 2 5 7 Generating Preprocessed Output for a Make Utility ppd Option 2 28 2 5 8 Generating a List of Files Included With the include Directive ppi Option 2 28 vii Contents viii 2 6 Understanding Diagnostic Messages 0 0 cece eee eee 2 29 2 6 1 Controlling Diagnostics sssaaa cece 2 31 2 6 2 How You Can Use Diagnostic Suppression Options 2 2 32 27 Other Messages xeric irane metan aa sak wap ni els aa hi ddd ata edit de 2 33 2 8 Generating Cross Reference Listing Information px Option 2 33 2 9 Generating a Raw Listing File pl Option 0
307. ndian AAAAAAAB IBBBBBBBBIBCCCDDEEJEEEEEEE X memory 16 5 4321098765432 02101087 6543210X MS LS Little endian X E EEEEEEEEDDCCCBBBBBBBBBBAAAAAAA register 1X8 765432 1010210987654321 06543210 31 0 Byte 0 Byte 1 Byte 2 Byte 3 Litle endan BAAAAAAAJ IBBBBBBBBIEEDDCCCBIXEEEEEEE memory 06543210 87654321 10102109 X8765 432 Legend X not used MS most significant LS least significant 8 14 Object Representation 8 2 3 Character String Constants In C a character string constant is used in one of the following ways J To initialize an array of characters For example char s abc When a string is used as an initializer it is simply treated as an initialized array each character is a separate initializer For more information about initialization see section 8 8 System Initialization on page 8 45 J In an expression For example strcpy s abc When a string is used in an expression the string itself is defined in the const section with the string assembler directive along with a unique label that points to the string the terminating 0 byte is included For exam ple the following lines define the string abc and the terminating 0 byte the label SL5 points to the string sect const SL5 string abc 0 String labels have the form SLn where n is a number assigned by the compiler to make the label unique The number begins at 0 and is in creased by 1 for each string defined All strings
308. ne after the fr option cl6x fr d object Specifies a directory for assembly files To specify an assembly file directory type the directory s pathname on the command line after the fs option cl6x fs d assembly Specifies a directory for temporary intermediate files To specify a temporary directory type the directory s pathname on the command line after the ft option cl6x ft c temp Using the C C Compiler 2 21 Changing the Compiler s Behavior With Options 2 3 6 Options That Control the Assembler 2 22 Following are assembler options that you can use with the shell aa adname ahcfilename ahifilename auname ax Invokes the assembler with the a assembler option which creates an absolute listing An absolute listing shows the ab solute addresses of the object code makes case insignificant in the assembly language source files For example c makes the symbols ABC and abc equivalent f you do not use this option case is significant this is the default dname value sets the name symbol This is equivalent to inserting name set value at the beginning of the assembly file If value is omitted the symbol is set to 1 Invokes the assembler with the hc assembler option to tell the assembler to copy the specified file for the assembly module The file is inserted before source file statements The copied file appears in the assembly listing files
309. ne to perform general file level optimization or you can combine it with other options to perform more specific optimizations The options listed in Table 3 1 work with 03 to perform the indicated optimization Table 3 1 Options That You Can Use With 03 3 5 1 If you Use this option Page Have files that redeclare standard library functions oln 3 18 Want to create an optimization information file onn 3 19 Want to compile multiple source files pm 3 20 a I a a Ee ET Note Do Not Lower the Optimization Level to Control Code Size When trying to reduce code size do not lower the level of optimization In fact you might see an increase in code size when lowering the level of opti mization Instead use the ms option to control the code size performance tradeoff For more information see section 3 4 Reducing Code Size ms Option on page 3 17 Controlling File Level Optimization oln Option When you invoke the optimizer with the o3 option some of the optimizations use known properties of the standard library functions If your file redeclares any of these standard library functions these optimizations become ineffec tive The ol lowercase L option controls file level optimizations The number following the ol denotes the level 0 1 or 2 Use Table 3 2 to select the ap propriate level to append to the ol option Table 3 2 Selecting a Level for the ol Option If your sour
310. ned to each identifier The identifier name One of the following values X Value D QO Cc PZ a D Meaning Definition Declaration not a definition Modification Address taken Used Changed used and modified in a single op eration Any other kind of reference Error reference is indeterminate The source file The line number in the source file The column number in the source file Using the C C Compiler 2 33 Generating a Raw Listing File p Option 2 9 Generating a Raw Listing File pl Option The pl option generates a raw listing file that can help you understand how the compiler is preprocessing your source file Whereas the preprocessed list ing file generated with the ppo ppc ppl and ppf preprocessor options shows a preprocessed version of your source file a raw listing file provides a comparison between the original source line and the preprocessed output The raw listing file has the same name as the corresponding source file with a rl extension The raw listing file contains the following information LJ Each original source line Transitions into and out of include files E _j Diagnostics E Preprocessed source line if nontrivial processing was performed com ment removal is considered trivial other preprocessing is nontrivial Each source line in the raw listing file begins with one of the identifiers listed in Table 2 3 Table 2 3 Raw Listing File Id
311. ng Silicon Revision to Simu late rev Option on page 6 8 for more information t xxx Sets timeout to xxx seconds The stand alone simulator aborts if no I O event occurs for xxx seconds I O events include sys tem calls Z Pauses after each internal I O error Does not pause for EOF Using the Stand Alone Simulator 6 5 Using the Profiling Capability of the Stand Alone Simulator 6 3 Using the Profiling Capability of the Stand Alone Simulator Invoking load6x with the g option runs the standalone simulator in profiling mode Source files must be compiled with the mg profiling option for profiling to work on the stand alone simulator see section 3 12 2 Profiling Optimized Code mg and o Options on page 3 34 The profile results resemble the results given by the profiler in the TI simulator debugger The profile results are stored in a file called by the same name as the out file with the vaa extension For example to create a profile information file called file vaa enter the follow ing load6x g file out Example 6 2 runs three different versions of the dot product routines and prints out the result of each routine Example 6 2 Profiling Dot Product Routines val 11480 val 11480 val 11480 lt t vaa gt Program Name Start Address Stop Address Run Cycles Profile Cycles BP Hits Area Name Excl Max CF dot_prodl 60 60 CF dot_prod2 55 55 CF dot_prod3 39 35 CF main
312. ng convention mandates that A4 and A5 are used as the return registers for a call statement The reserve in this example guarantees that the assembly optimizer does not use A10 to A13 or B10 to B13 for the variables tmp1 to tmp5 test proc a4 b4 reg tmpl tmp2 tmp3 tmp4 tmp5 reserve al0 all al2 al13 b10 b11 b12 b13 endproc a4 The assembly optimizer may generate less efficient code if the available register pool is overly restricted In addition it is possible that the available register pool is constrained such that allocation is not possible and an error message is generated For example the following code generates an error since all of the conditional registers have been reserved but a conditional register is required for the symbol tmp ECPLOCG ya reserve al a2 b0 b1 b2 reg tmp tmp endproc Syntax Description Example Return a Value to a C Callable Procedure return return argument The return directive function is equivalent to the return statement in C C code It places the optional argument in the appropriate register for a return value as per the C C calling conventions see section 8 4 on page 8 18 The optional argument can have the folowing meanings Lj Zero arguments implies a cproc region that has no return value similar to a void function in C C code _j An argument implies a cproc region that has a 32 bit return value similar to an int function i
313. ng object files by using the c cmd command file The o option names the output file and the option names the run time support library The order in which the linker processes arguments is important The compiler passes arguments to the linker in the following order 1 Object filenames from the command line 2 Arguments following the z option on the command line 3 Arguments following the z option from the C OPTION or C6X_C_OPTION environment variable Disabling the Linker c Shell Option 5 3 Disabling the Linker c Shell Option You can override the z option by using the c shell option The c option is especially helpful if you specify the z option in the C_OPTION or C6X_C_OPTION environment variable and want to selectively disable linking with the c option on the command line The c linker option has a different function than and is independent of the c shell option By default the compiler uses the c linker option when you use the z option This tells the linker to use C C linking conventions autoinitial ization of variables at run time If you want to initialize variables at load time use the cr linker option following the z option Linking C C Code 5 5 Linker Options 5 4 Linker Options 5 6 Allcommand line input following the z option is passed to the linker as param eters and options Following are the options that control the linker along with detailed descr
314. nguage interface The compiler has straightforward calling conventions so you can write assembly and C functions that call each other For more information see Chapter 8 Run Time Environment C C Compiler Overview 1 2 4 Compiler Operation 1 2 5 Utilities The following features pertain to the operation of the compiler Lj Integrated preprocessor The C C preprocessor is integrated with the parser allowing for faster compilation Stand alone preprocessing or preprocessed listing is also available For more information see section 2 5 Controlling the Prepro cessor on page 2 24 Optimization The compiler uses a sophisticated optimization pass that employs several advanced techniques for generating efficient compact code from C C source General optimizations can be applied to any C C code and C6000 specific optimizations take advantage of the features specific to the C6000 architecture For more information about the C C compiler s optimization techniques see Chapter 3 Optimizing Your Code The following features pertain to the compiler utilities d Source interlist utility The compiler tools include a utility that interlists your original C C source statements into the assembly language output of the compiler This utility provides you with a method for inspecting the assembly code gener ated for each C C statement For more information see section 2 13 Using the Interlist Utility on page 2 43
315. nguage program global _asmfunc global _gvar _asmfunc LDW b14 _gvar A3 NOP 4 ADD a3 a4 a3 STW a3 b14 _gvar MV a3 a4 B b3 NOP 5 In the C program in Example 8 1 the extern declaration of asmfunc is optional because the return type is int Like C C functions you need to declare assembly functions only if they return noninteger values or pass nonin teger parameters 8 24 8 5 2 Using Intrinsi Interfacing C and C With Assembly Language cs to Access Assembly Language Statements The C6000 compiler recognizes a number of intrinsic operators Intrinsics allow you to express the meaning of certain assembly statements that would otherwise be cumbersome or inexpressible in C C Intrinsics are used like functions you can use C C variables with these intrinsics just as you would with any normal function The intrinsics are specified with a leading underscore and are accessed by calling them as you do a function For example Int Kl x2 y y _sadd xl x2 The intrinsics listed in Table 8 3 correspond to the indicated C6000 assembly language instructions See the TMS320C6000 CPU and Instruction Set Refer ence Guide for more information 3 i SS ee ee ee eee SS SS es Oe Note Intrinsic Instructions in C versus Assembly Language In some instances an intrinsic s exact corresponding assembly language instruction may not be used by the compiler When this is the case the mean ing of t
316. nificant bits of the return value See section 8 5 3 Using Unaligned Data and 64 Bit Values for details on manipulating 8 byte data quantities 8 26 Interfacing C and C With Assembly Language Table 8 3 TMS320C6000 C C Compiler Intrinsics Continued C C Compiler Intrinsic int_cmpeqA int src7 int src2 Assembly Instruction CMPEQ4 Description Performs equality comparisons on each pair of 8 bit values Equality results are packed into the two least significant bits of the return value Devicet C6400 int_cmpgt2 int src7 int src2 CMPGT2 Compares each pair of signed 16 bit values Results are packed into the two least significant bits of the return value C6400 uint_cmpgtu4 uint src7 uint src2 CMPGTU4 Compares each pair of signed 16 bit values Results are packed into the two least significant bits of the return value C6400 uint _deal uint src DEAL The odd and even bits of src are ex tracted into two separate 16 bit val ues C6400 int _dotp2 int src7 int src2 double _Idotp2 int src7 int src2 DOTP2 LDOTP2 The product of the signed lower 16 bit values of src1 and src2 is added to the product of the signed upper 16 bit val ues of src1 and src2 The _lo and _hi intrinsics are needed to access each half of the 64 bit inte ger result C6400 int_dotpn2 int src7 int src2 DOTPN2 The product of the signed lower 16 bit values o
317. nk the mod ule in directly Lj Include the appropriate run time support library as an input file the linker automatically extracts boot obj when you use the c or cr option Chapter 9 describes additional run time support functions that are included in the library These functions include ANSI C standard run time support a a aE Note The _c_int00 Symbol One important function contained in the run time support library is _c_int00 The symbol _c_int00 is the starting point in boot obj if you use the c or cr linker option _c_int0O is automatically defined as the entry point for the program If your program begins running from reset you should set up the reset vector to branch to _c_int00 so that the processor executes boot obj first ee Linking C C Code 5 9 Controlling the Linking Process 5 5 3 Global Variable Construction Global C variables having constructors and destructors require their constructors to be called during program initialization and their destructors to be called during program termination The C C compiler produces a table of constructors to be called at startup The table is contained in a named section called pinit The constructors are invoked in the order that they occur in the table All constructors are called after initialization of global variables and before main is called Destructors are registered through the atexit system call and therefore are invoked during the
318. nks J Taddress paths are resource bound T address paths defined the num ber of memory accesses that must be sent out on the address bus each loop iteration If these are the resource bound for the loop it is often pos sible to reduce the number of accesses by performing word accesses LDW STW for any short accesses being performed Optimizing Software Pipelining 3 2 3 Collapsing Prologs and Epilogs for Improved Performance and Code Size When a loop is software pipelined a prolog and epilog are generally required The prolog is used to pipe up the loop and epilog is used to pipe down the loop In general a loop must execute a minimum number of iterations before the software pipelined version can be safely executed If the minimum known trip count is too small either a redundant loop is added or software pipelining is disabled Collapsing the prolog and epilog of a loop can reduce the minimum trip count necessary to safely execute the pipelined loop Collapsing can also substantially reduce code size Some of this code size growth is due to the redundant loop The remainder is due to the prolog and epilog The prolog and epilog of a software pipelined loop consists of up to p 1 stages of length ii where pis the number of iterations that are executed in parallel dur ing the steady state and iiis the cycle time for the pipelined loop body During prolog and epilog collapsing the compiler tries to collapse as many stages as possibl
319. nopgqrstuvwxyz char stre abcdefg size_t length length strlen stra length 13 length strlen strb length 26 length strlen strc length 7 f r Syntax for C Syntax for C Defined in Description Example strncat Concatenate Strings include lt string h gt char strncat char dest const char src size_t n include lt cstring gt char strncat char dest const char src size_t n strncat c in rts src The strncat function appends up to n characters of src including a terminating null character to dest The initial character of src overwrites the null character that originally terminated dest strncat appends a null character to the result The function returns the value of dest Inthe following example the character strings pointed to by a b and c were assigned the values shown in the comments In the comments the notation O represents the null character char ap top c size_t size 13 a gt I do not like them 0 eee b gt Sam I am O c gt I do not like green eggs and ham 0 strncat a b size a gt I do not like them Sam I am 0 ive b gt Sam I am O Tine c gt I do not like green eggs and ham 0 Kf strncat a c size a gt I do not like them Sam I am I do not like 0 b gt Sam I am O ae c gt I do not like green eggs and ha
320. not specify a direc tory name the preprocessor ignores the i option For more information see section 2 5 2 1 Changing the include File Search Path With the i Option on page 2 26 Retains the assembly language output from the compiler or assembly optimizer Normally the shell deletes the output assembly language file after assembly is complete Produces code in big endian format By default little endian code is produced Generates large memory model code on four levels ml0 ml1 ml2 and ml3 _j ml0 defaults aggregate data structs and arrays to far Lj ml1 defaults all function calls to far Lj ml2 defaults all aggregate data and calls to far Lj ml3 defaults all data and calls to far If no level is specified all data and functions default to near Near data is accessed via the data page pointer more effi ciently while near calls are executed more efficiently using a PC relative branch Use these options if you have too much static and extern data to fit within a 15 bit scaled offset from the beginning of the bss section or if you have calls where the called function is more than 1024 words away from the call site The linker issues an error message when these situations occur See section 7 4 4 The near and far Keywords on page 7 11 and section 8 1 5 Memory Models on page 8 6 for more information n q S uname Z Changing the Compiler s Behavior With Options Selects
321. ns that are called by other modules but has op1 global variables that are modified in other modules Does not have functions that are called by other modules or glob op2 al variables that are modified in other modules Has functions that are called from other modules but does not op3 have global variables that are modified in other modules In certain circumstances the compiler reverts to a different op level from the one you specified or it might disable program level optimization altogether Table 3 5 lists the combinations of op levels and conditions that cause the compiler to revert to other op levels Optimizing Your Code 3 21 Performing Program Level Optimization pm and 03 Options Table 3 5 Special Considerations When Using the op Option Then the op If your op is Under these conditions level Not specified The 03 optimization level was specified Defaults to op2 Not specified The compiler sees calls to outside functions Reverts to op0 under the 03 optimization level Not specified Main is not defined Reverts to op0 op1 or op2 No function has main defined as an entry Reverts to op0 point and functions are not identified by the FUNC_EXT_CALLED pragma op1 or op2 No interrupt function is defined Reverts to op0 op1 or op2 Functions are identified by the Remains op1 or FUNC_EXT_CALLED pragma op2 op3 Any condition Remains op3 In some situations w
322. nt compar include lt cstdlib gt void std qsort void base size_t nmemb size_t size int compar qsort c in rts src The qsort function sorts an array of nmemb members Argument base points to the first member of the unsorted array argument size specifies the size of each member This function sorts the array in ascending order Argument compar points to a function that compares key to the array elements Declare the comparison function as int cmp const void ptrl const void ptr2 The cmp function compares the objects that ptr1 and ptr2 point to and returns one of the following values lt 0 if ptr1 is less than ptr2 O if ptr1 is equal to ptr2 gt 0 if ptri is greater than ptr2 int list 10 9 8 7 6 5 4 3 2 1 0 int intcmp const void ptrl const void ptr2 return int ptrl int ptr2 Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C Defined in Description realloc Random Integer include lt stdlib h gt int rand void void srand unsigned int seed include lt cstdlib gt int std rand void void std srand unsigned int seed rand c in rts src Two functions work together to provide pseudorandom sequence generation Lj The rand function returns pseudorandom integers in the range 0 RAND_MAX _j The srand function sets the value of seed so that a subsequent call to the rand function produces a new
323. nting Memory Bank Conflicts The assembly optimizer uses the assumptions that memory operations do not have bank conflicts If it determines that two memory operations have a bank conflict on any loop iteration it does notschedule the operations in parallel The assembly optimizer checks for memory bank conflicts only for those loops that it is trying to software pipeline The information required for memory bank analysis indicates a base an offset a stride a width and an iteration delta The width is implicitly determined by the type of memory access byte halfword word or double word for the C6400 and C6700 The iteration delta is determined by the assembly optimizer as it constructs the schedule for the software pipeline The base offset and stride are supplied the load and store instructions and or by the mptr directive Using the Assembly Optimizer 4 35 Avoiding Memory Bank Conflicts With the Assembly Optimizer An LD B BU H HU W or ST B H W operation in linear assembly can have memory bank information associated with it implicitly by using the mptr direc tive The mptr directive associates a register with the information that allows the assembly optimizer to determine automatically whether two memory op erations have a bank conflict If the assembly optimizer determines that two memory operations have a memory bank conflict then it does not schedule them in parallel The syntax is mptr register base offset s
324. nts to into the object that s1 points to the function returns the value of s1 The memmove function correctly copies characters between overlapping objects Duplicate Value in Memory include lt string h gt void memset void mem register int ch register size_t length include lt cstring gt void std memset void mem register int ch register size_t length memset c in rts src The memset function copies the value of ch into the first length characters of the object that mem points to The function returns the value of mem Syntax for C Syntax for C Defined in Description minit Reset Dynamic Memory Pool no prototype provided void minit void no prototype provided void std minit void memory c in rts src The minit function resets all the space that was previously allocated by calls to the malloc calloc or realloc functions The memory that minit uses is in a special memory pool or heap The constant ___SYSMEM_SIZE defines the size of the heap as 2K bytes You can change this amount at link time by invoking the linker with the heap option and specifying the desired size of the heap in bytes directly after the option For more information refer to section 8 1 3 Dynamic Memory Allocation on page 8 5 Se ee Oe Se eo ee eS Se Note No Previously Allocated Objects Are Available After minit Calling the minit function makes al the memory space in the heap available again Any objects that you allo
325. ny variable or array to ensure that its value is not altered If you define an object as far const the const section allocates storage for the object The const data storage allocation rule has two exceptions I Ifthe keyword volatile is also specified in the definition of an object for ex ample volatile const int x Volatile keywords are assumed to be allocated to RAM The program does not modify a const volatile object but some thing external to the program might I Ifthe object has automatic storage allocated on the stack In both cases the storage for the object is the same as if the const keyword were not used The placement of the const keyword within a definition is important For exam ple the first statement below defines a constant pointer p to a variable int The second statement defines a variable pointer q to a constant int int const p const int q amp X amp X Using the const keyword you can define large constant tables and allocate them into system ROM For example to allocate a ROM table you could use the following definition far const int digits 0 1 2 3 4 5 6 7 8 9 TMS320C6000 C C Language Implementation 7 7 Keywords 7 4 2 The cregister Keyword The C6000 compiler extends the C C language by adding the cregister key word to allow high level language access to control registers When you use the cregister keyword on an object the compiler compares the name of the object
326. oc and endproc are used _if_then cproc a cword mask theta reg cond if ai sum cntr MVK S2y Ones vent 32 ZERO sum sum 0 LOOP AND S2X cword mask cond cond codeword amp mask cond MVK S2 ITpcona z LCI cond CMPEQ be theta cond if theta cond LDH D1 a ai zali if ADD eK sum ai sum sum a i lif SUB D1 sum ai sum sum ali SHL eo mask 1 mask mask mask lt lt 1 centr ADD L2 1 Entr Cntr decrement counter centet B SI LOOP for LOOP return sum endproc Using the Assembly Optimizer 4 21 mdep Indicates a Memory Dependence Syntax Description Example 4 22 mdep symbol 1 symbol2 The mdep directive identifies a specific memory dependence Following is a description of the mdep directive parameters symbol The symbol parameter is the name of the memory reference The symbol used to name a memory reference has the same syntax restric tions as any assembly symbol For more information about symbols see the TMS320C6000 Assembly Language Tools User s Guide It is in the same space as the symbolic registers You cannot use the same name for a symbolic register and annotating a memory reference The mdep directive tells the assembly optimizer that there is a dependence between two memory references The mdep directive is valid only within procedures that is within occurrences of the proc and endproc directive pair or the
327. odules do not use the cinit section for any other purpose Figure 8 8 Format of Initialization Records in the pinit Section pinit section Address of constructor 1 Address of constructor 2 Address of constructor 3 Address of constructor n When you use the c or cr option the linker combines the cinit sections from all the C modules and appends a null word to the end of the composite cinit section This terminating record appears as a record with a size field of 0 and marks the end of the initialization tables Likewise the c or cr linker option causes the linker to combine all of the pinit sections from all C C modules and append a null word to the end of the com posite pinit section The boot routine knows the end of the global constructor table when it encounters a null constructor address The const qualified variables are initialized differently see section 7 4 1 The const Keyword on page 7 7 Run Time Environment 8 49 System Initialization 8 8 4 Autoinitialization of Variables at Run Time Autoinitializing variables at run time is the default method of autoinitialization To use this method invoke the linker with the c option Using this method the cinit section is loaded into memory along with all the other initialized sections The linker defines a special symbol called cinit that points to the beginning of the initialization tables in memory When the program b
328. of the pragma in C is pragma FUNC_CANNOT_INLINE funo The syntax of the pragma in C is pragma FUNC_CANNOT_INLINE In C the argument func is the name of the function that cannot be inlined In C the pragma applies to the next function declared 7 7 6 The FUNC_EXT_CALLED Pragma When you use the pm option the compiler uses program level optimization When you use this type of optimization the compiler removes any function that is not called directly or indirectly by main You might have C C functions that are called by hand coded assembly instead of main The FUNC_EXT_CALLED pragma specifies to the optimizer to keep these C functions or any other functions that these C C functions call These func tions act as entry points into C C The pragma must appear before any declaration or reference to the function that you want to keep The syntax of the pragma in C is pragma FUNC_EXT_CALLED func The syntax of the pragma in C is pragma FUNC_EXT_ CALLED TMS320C6000 C C Language Implementation 7 23 Pragma Directives In C the argument func is the name of the function that you do not want removed In C the pragma applies to the next function declared Except for _c_int00 which is the name reserved for the system reset interrupt for C C programs the name of the interrupt the func argument does not need to conform to a naming convention W
329. oftware tool that reads the source file performs preprocessing functions checks the syntax and produces an intermediate file used as input for the optimizer or code generator partitioning The process of assigning a data path to each instruction pipelined loop epilog The portion of code that drains a pipeline in a soft ware pipelined loop See also epilog pipelined loop prolog The portion of code that primes the pipeline in a software pipelined loop See also prolog pop An operation that retrieves a data object from a stack pragma A preprocessor directive that provides directions to the compiler about how to treat a particular statement preprocessor A software tool that interprets macro definitions expands macros interprets header files interprets conditional compilation and acts upon preprocessor directives program level optimization An aggressive level of optimization where all of the source files are compiled into one intermediate file Because the compiler can see the entire program several optimizations are per formed with program level optimization that are rarely applied during file level optimization prolog The portion of code in a function that sets up the stack See also pi pelined loop prolog push An operation that places a data object on a stack for temporary stor age redundant loops Two versions of the same loop where one is a software pipelined loop and the other is an unpipelined loop R
330. oints to A macro that calls fgetc and supplies stdin as the argument Performs the same function as fgets using stdin as the input stream Maps the error number in _s to a string and prints the error message Performs the same function as fprintf but uses stdout as its output stream A macro that performs like fputc A macro that calls foutc and uses stdout as the output stream Run Time Support Functions Page 9 60 9 61 9 61 9 61 9 62 9 63 9 64 9 64 9 64 9 65 9 65 9 65 9 66 9 66 9 77 9 79 9 79 9 79 9 31 Summary of Run Time Support Functions and Macros f C VO functions stdio h cstdio Function int puts const char _ptr int remove const char _file int rename const char _old_name const char _new_name void rewind register FILE _fp int scanf const char _ fmt void setbuf register FILE _fp char _buf int setvbuf register FILE _fp register char _buf register int _type register size_t _ size int sprintf char _string const char _format int sscanf const char _str const char _fmt FILE tmpfile void char tmpnam char _s int ungetc int _c register FILE _fp int vfprintf FILE _fp const char _format va_list _ap int vprintf const char _format va_list _ap int vsprintf char _string const char _format va_list _ap 9 32 Description Writes the string pointed to by _ ptr to stdout
331. ompilation check the assembly output to make sure your asm statements are correct and maintain the integrity of the program Automatic Inline Expansion oi Option 3 10 Automatic Inline Expansion oi Option When optimizing with the o3 option the compiler automatically inlines small functions A command line option oisize specifies the size threshold Any function larger than the size threshold is not automatically inlined You can use the oisize option in the following ways Lj Ifyou set the size parameter to 0 oi0 automatic inline expansion is dis abled _j If you set the size parameter to a nonzero integer the compiler uses this size threshold as a limit to the size of the functions it automatically inlines The optimizer multiplies the number of times the function is inlined plus 1 if the function is externally visible and its declaration cannot be safely re moved by the size of the function The compiler inlines the function only if the result is less than the size parame ter The compiler measures the size of a function in arbitrary units however the optimizer information file created with the on1 or on2 option reports the size of each function in the same units that the oi option uses The oisize option controls only the inlining of functions that are not explicitly declared as inline If you do not use the oisize option the optimizer inlines very small functions a a ET No
332. on Accesses the next argument of type type in a variable argument list Resets the calling mechanism after using va_arg Initializes ap to point to the first operand in the variable argument list Description Adds a device record to the device table Clears the EOF and error indicators for the stream that _ fp points to Flushes the stream that _fp points to and closes the file associated with that stream Tests the EOF indicator for the stream that _fp points to Tests the error indicator for the stream that _ fp points to Flushes the I O buffer for the stream that _fp points to Reads the next character in the stream that _ fp points to Stores the object that pos points to to the current value of the file position indicator for the stream that _ fp points to Reads the next_ size minus 1 characters from the stream that _fp points to into array _ ptr Page 9 85 9 85 Page 9 106 9 106 9 106 Page 9 40 9 50 9 57 9 57 9 58 9 58 9 58 9 58 9 59 f C I O functions stdio h cstdio Function FILE fopen const char _fname const char _mode int fprintf FILE _fp const char _format int fputc int _c register FILE _fp int fputs const char _ptr register FILE _ fp size_t fread void _ptr size_t _size size_t_count FILE _fp FILE freopen const char _fname const char _mode register FILE _fp int fscanf FILE _fp const char _fmt int fseek register
333. on accessing this function 9 28 Page 9 52 9 52 9 52 9 55 9 56 9 55 9 56 9 56 9 55 9 57 9 57 9 59 9 59 9 60 9 60 9 63 9 63 9 69 9 69 9 70 9 70 9 70 9 70 9 70 9 70 c Floating point math functions math h cmath Function double modf double value double ip float modff float value float ip double pow double x double y float powf float x float y double powi double x int y float powif float x int y double round double x float roundf float x double rsqrt double x float rsqrtf float x double sin double x float sinf float x double sinh double x float sinhf float x double sqrt double x float sqrtf float x double tan double x float tanf float x double tanh double x float tanhf float x double trunc double x float truncf float x Summary of Run Time Support Functions and Macros Description Breaks value into a signed integer and a signed fraction Breaks value into a signed integer and a signed fraction Returns xY Returns xY Returns xi t Returns xi t Returns x rounded to the nearest integer t Returns x rounded to the nearest integer t Returns the reciprocal square root of x t Returns the reciprocal square root of x t Returns the sine of x Returns the sine of x Returns the hyperbolic sine of x Returns the hyperbolic sine of x Returns the nonnegative square root of x Returns the nonnegative square root of x Returns
334. ons 000005 3 34 3 13 What Kind of Optimization Is Being Performed 0cc cece eee eee 3 35 3 13 1 Cost Based Register Allocation 0 0 0 e cece eee eee 3 36 3 13 2 Alias Disambiguation 0 0 teens 3 38 3 13 3 Branch Optimizations and Control Flow Simplification 3 38 3 13 4 Data Flow Optimizations 0 ccc eee 3 41 3 13 5 Expression Simplification 0c ccc eee 3 41 3 13 6 Inline Expansion of Functions 0 0 cece eee eee 3 42 3 13 7 Induction Variables and Strength Reduction 000200eeeeeeee 3 43 3 13 8 Loop Invariant Code Motion 0 0 eens 3 44 3 13 9 sLoop Rotations 04 vawaepduang feleng peepee eeeg hs Pade ede EEE 3 44 3 13 10 Register Variables 0 0 EE VE REET RT E E eee 3 44 3 13 11 Register Tracking Targeting 0 cece cee teens 3 44 3 13 12 Software Pipelining 0 c cece eee eee eens 3 45 4 Using the Assembly Optimizer 002 ccc eee eee eee eee 4 1 Describes the assembly optimizer which schedules instructions and allocates registers for you Also describes how to write code for the assembly optimizer including information about the directives that you should use with the assembly optimizer 4 1 4 2 4 3 4 4 4 5 4 6 Code Development Flow to Increase Performance 00 cece eee eens 4 2 About the Assembly Optimizer 0 0 0 cece eee teen
335. ons Summary Changing the Compiler s Behavior With Options a Options that control the compiler shell Option filename dname def g gp idirectory k n q qq S Effect Interprets contents of a file as an extension to the command line Multiple instances may be used Disables linking negates z Predefines name Enables symbolic debugging and assembly source debugging Allows the profiling of optimized code Enables symbolic debugging and assembly source debugging and genererates DWARF debugging information Defines include search path Keeps the assembly language asm file Compiles or assembly optimizes only Suppresses progress messages quiet Suppresses all messages super quiet Interlists optimizer comments if available and assembly source statements otherwise interlists C and assembly source statements Interlists C source and assembly statements Undefines name Enables linking Using the C C Compiler Page 2 15 2 15 2 15 2 15 3 34 2 16 2 16 2 26 2 16 2 17 2 17 2 17 2 17 2 17 3 30 2 17 2 17 2 7 Changing the Compiler s Behavior With Options Table 2 1 Shell Options Summary Continued b Options that change the default file extensions 2 8 Option eal Jextension ec extension ell extension eo Jextension ep Jextension Effect Sets a default extension for assembly source file
336. ons with no type or storage class only an identifier are illegal in ANSI but legal in K amp R a illegal unless pk used ANSI interprets file scope definitions that have no initializers as tentative definitions In a single module multiple definitions of this form are fused together into a single definition Under K amp R each definition is treated as a separate definition resulting in multiple definitions of the same object and usually an error For example int a int a illegal if pk used OK if not Under ANSI the result of these two definitions is a single definition for the object a For most K amp R compilers this sequence is illegal because int ais defined twice ANSI prohibits but K amp R allows objects with external linkage to be redeclared as static extern int a static int a illegal unless pk used Unrecognized escape sequences in string and character constants are explicitly illegal under ANSI but ignored under K amp R char c q same as q if pk used error if not TMS320C6000 C C Language Implementation 7 35 Changing the ANSI C language Mode J ANSI specifies that bit fields must be of type int or unsigned With pk bit fields can be legally defined with any integral type For example Struct sS short 2 illegal unless pk used Lj K amp R syntax allows a trailing comma in enumerator lists enum a b c illegal unless pk u
337. onst char st Defined in atof c atoi c and atol c in rts src Description Three functions convert strings to numeric representations I The atof function converts a string into a floating point value Argument st points to the string the string must have the following format space sign digits digits e E sign integer I The atoi function converts a string into an integer Argument st points to the string the string must have the following format space sign digits I The atol function converts a string into a long integer Argument st points to the string the string must have the following format space sign digits The space is indicated by a space character a horizontal or vertical tab a carriage return a form feed or a new line Following the space is an optional sign and the digits that represent the integer portion of the number The frac tional part of the number follows then the exponent including an optional sign The first character that cannot be part of the number terminates the string The functions do not handle any overflow resulting from the conversion Run Time Support Functions 9 47 bsearch Syntax for C Syntax for C Defined in Description Example 9 48 Array Search include lt stdlib h gt void bsearch register const void key register const void base size_tnmemb size_t size int compar const void const void include lt cstdlib gt
338. onversion timekeeping trigonometry and ex ponential and hyperbolic functions Functions for signal handling are not included because these are target system specific The library includes the ANSI C subset as well as those components necessary for language support For more information see Chapter 8 Run Time Environment Introduction 1 5 C C Compiler Overview 1 2 2 Output Files The following features pertain to output files created by the compiler J Assembly source output The compiler generates assembly language source files that you can inspect easily enabling you to see the code generated from the C C source files J COFF object files Common object file format COFF allows you to define your system s memory map at link time This maximizes performance by enabling you to link C C code and data objects into specific memory areas COFF also supports source level debugging J Code to initialize data into ROM For stand alone embedded applications the compiler enables you to link all code and initialization data into ROM allowing C C code to run from reset 1 2 3 Compiler Interface The following features pertain to interfacing with the compiler Lj Compiler shell program The compiler tools include a shell program that you use to compile assembly optimize assemble and link programs in a single step For more information see section 2 1 About the Shell Program on page 2 2 J Flexible assembly la
339. or With Options Table 2 1 Shell Options Summary Continued h Parser options that control diagnostics Option Effect Page pdel num Sets the error limit to num The compiler abandons 2 31 compiling after this number of errors The default is 100 pden Displays a diagnostic s identifiers along with its text 2 31 pdf Generates a diagnostics information file 2 31 pdr Issues remarks nonserious warnings 2 31 pds num Suppresses the diagnostic identified by num 2 31 pdse num Categorizes the diagnostic identified by num as an 2 31 error pdsr num Categorizes the diagnostic identified by numasare 2 31 mark pdsw num Categorizes the diagnostic identified by num as a 2 31 warning pdv Provides verbose diagnostics that display the original 2 32 source with line wrap pdw Suppresses warning diagnostics errors are still 2 32 issued Using the C C Compiler 2 11 Changing the Compiler s Behavior With Options Table 2 1 Shell Options Summary Continued i Options that control optimization Option Effect Page 00 Optimizes register usage 3 2 o1 Uses 00 optimizations and optimizes locally 3 2 02 or O Uses 01 optimizations and optimizes globally 3 3 03 Uses 02 optimizations and optimizes the file 3 3 oisize Sets automatic inlining size 03 only If size is not 3 29 specified the default is 1 ol0 or oLO Informs the optimizer that your file alters a standard 3 18 li
340. ordinary functions you code yourself If you do not use a ml option to enable one of large memory models then these calls will be near The mr0 option causes Calls to run time support functions to be near regardless of the setting of the ml option The mr0 option is for special situations and typically is not needed The mr1 option causes calls to run time support functions to be far regardless of the setting of the ml option The mr option only addresses how run time support functions are called Calling functions with the far method does not mean those functions must be in off chip memory It simply means those functions can be placed at any dis tance from where they are called Be default all run time support data is defined as far Keywords 7 4 4 4 Large model option ml The large model command line option changes the default near and far assumptions The near and far modifiers always override the default The mln option generates large memory model code on four levels ml0 ml1 ml2 and mls ml ml0 Aggregate data structs arrays default to far ml1 All calls default to far ml2 All aggregate data and calls default to far ml3 All calls and all data default to far If no level is specified all data and functions default to near Near data is ac cessed via the data page pointer more efficiently while near calls are executed more efficiently using a PC relative branch Use
341. orizontal or vertical carriage return form feed or new line character Tests c to see if it is an uppercase ASCII alphabetic character Tests c to see if it is a hexadecimal digit Masks c into a legal ASCII value Converts c to lowercase if it is uppercase Converts c to uppercase if it is lowercase Note Functions in ctype h cctype are expanded inline except when the pi option is used 9 26 Page 9 44 Page 9 67 9 67 9 67 9 67 9 67 9 67 9 67 9 67 9 67 9 67 9 67 9 67 9 104 9 104 9 104 c Floating point math functions math h cmath Summary of Run Time Support Functions and Macros Function Description Page double acos double x Returns the arc cosine of x 9 38 float acosf float x Returns the arc cosine of x 9 38 double acosh double x Returns the hyperbolic arc cosine of x t 9 38 float acoshf float x Returns the hyperbolic arc cosine of x t 9 38 double acot double x Returns the arc cotangent of x t 9 39 double acot2 double x double y Returns the arc cotangent of x y t 9 39 float acot2f float x float y Returns the arc cotangent of x y t 9 39 float acotf float x Returns the arc cotangent of x t 9 39 double acoth double x Returns the hyperbolic arc cotangent of x t 9 40 float acothf float x Returns the hyperbolic arc cotangent of x t 9 40 double asin double x Returns the arc sine of x 9 43 float asinf float x Returns the arc sine of x 9 43 double asinh double x Returns the hy
342. ot warrant or represent that any license either express or implied is granted under any patent right copyright mask work right or other intellectual property right of TI covering or relating to any combination machine or process in which such products or services might be or are used TI s publication of information regarding any third party s products or services does not constitute Tl s approval license warranty or endorsement thereof Reproduction of information in TI data books or data sheets is permissible only if reproduction is without alteration and is accompanied by all associated warranties conditions limitations and notices Representation or reproduction of this information with alteration voids all warranties provided for an associated TI product or service is an unfair and deceptive business practice and TI is not responsible nor liable for any such use Resale of Tl s products or services with statements different from or beyond the parameters stated by TI for that products or service voids all express and any implied warranties for the associated TI product or service is an unfair and deceptive business practice and TI is not responsible nor liable for any such use Also see Standard Terms and Conditions of Sale for Semiconductor Products www ti com sc docs stdterms htm Mailing Address Texas Instruments Post Office Box 655303 Dallas Texas 75265 Copyright 2001 Texas Instruments Incorporated
343. ou are free to use the stack inside a function as long as you pop everything you pushed before your function exits You can use all other registers freely without preserving their contents Interrupt routines must save allthe registers they use For more informa tion see section 8 6 Interrupt Handling on page 8 41 Interfacing C and C With Assembly Language When you call a C C function from assembly language load the desig nated registers with arguments and push the remaining arguments onto the stack as described in section 8 4 1 How a Function Makes a Call on page 8 18 Remember that only A10 to A15 and B10 to B15 are preserved by the C C compiler C C functions can alter any other registers save any other registers whose contents need to be preserved by pushing them onto the stack before the function is called and restore them after the func tion returns Functions must return values correctly according to their C C declara tions Integers and 32 bit floating point float values are returned in A4 Doubles and long doubles are returned in A5 A4 Structures are returned by copying them to the address in A3 No assembly module should use the cinit section for any purpose other than autoinitialization of global variables The C C startup routine as sumes that the cinit section consists entirely of initialization tables Dis rupting the tables by putting other information in cinit can cause unpredict able result
344. owever other pragmas such as UNROLL and MUST_ITERATE may appear between the PROB_ITERATE pragma and the loop The syntax of the pragma for C and C is pragma PROB_ITERATE min max Where min and max are the minimum and maximum trip counts of the loop in the common case The trip count is the number of times a loop iterates Both arguments are optional For example PROB_ITERATE could be applied to a loop that executes for eight iterations in the majority of cases but sometimes may execute more or less than eight iterations pragma PROB_ITERATE 8 8 TMS320C6000 C C Language Implementation 7 29 Pragma Directives If only the minimum expected trip count is known say it is 5 the pragma would look like this pragma PROB_ITERATE 5 If only the maximum expected trip count is known say it is 10 the pragma would look like this pragma PROB_ITERATE 10 Note the blank field for min 7 7 17 The STRUCT_ALIGN Pragma 7 30 The STRUCT_ALIGN pragma is similar to DATA_ALIGN but it can be applied to a structure union type or typedef and is inherited by any symbol created from that type The STRUCT_ALIGN pragma is supported only in C The syntax of the pragma is pragma STRUCT_ALIGN type constant expression This pragma guarantees that the alignment of the named type or the base type of the named typedef is at least equal to that of the expression The alignment may be gr
345. p long _ offset int _ptrname fseek c in rts src The fseek function sets the file position indicator for the stream pointed to by _ fp The position is specified by _ptrname For a binary file use _ offset to posi tion the indicator from _ptrname For a text file offset must be 0 Set File Position Indicator include lt stdio h gt int fsetpos FILE _fp const foos_t _pos fsetpos c in rts src The fsetpos function sets the file position indicator for the stream pointed to by _fp to _pos The pointer pos must be a value from fgetpos on the same stream Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C Defined in Description getc Get Current File Position Indicator include lt stdio h gt long ftell FILE _fp include lt cstdio gt long std ftell FILE _fp ftell c in rts src The ftell function gets the current value of the file position indicator for the stream pointed to by _ fp Write Block of Data include lt stdio h gt size_t fwrite const void _ptr size_t_size size_t _count register FILE fp include lt cstdio gt size_t std fwrite const void _ptr size_t _size size_t count register FILE _fp fwrite c in rts src The fwrite function writes a block of data from the memory pointed to by _ ptr to the stream that _ fp points to Read Next Character include lt stdio h
346. paces as for revision 3 silicon see Figure 4 2 on page 4 35 If the q option is not used the load6x banner lists the selected silicon revision Stand Alone Simulator Example 6 5 Stand Alone Simulator Example A typical use of the stand alone simulator is running code that includes the clock function to find the number of cycles required to run the code Use printf statements to display your data to the screen Example 6 3 shows an example of the C code for accomplishing this Example 6 3 C Code With Clock Function include lt stdio h gt include lt time h gt main clock_t start clock_t overhead clock_t elapsed Calculate the overhead from calling clock start clock overhead clock start Calculate th lapsed time start clock puts Hello world elapsed clock start overhead printf Time ld cycles n long elapsed To compile and link the code in Example 6 3 enter the following text on the command line The z option invokes the linker linker option names a linker command file and the o linker option names the output file cl6x clock c z 1l 1nk60 cmd o clock out To run the stand alone simulator on the resulting executable COFF file enter load6x clock out Example 6 4 Stand Alone Simulator Results After Compiling and Linking Example 6 3 TMS320C6x Standalone Simulator Version X xx Copyright c 1989 2000 T
347. perbolic arc sine of x t 9 44 float asinhf float x Returns the hyperbolic arc sine of x t 9 44 double atan double x Returns the arc tangent of x 9 45 double atan2 double y double x Returns the arc tangent of y x 9 45 float atan2f float y float x Returns the arc tangent of y x 9 45 float atanf float x Returns the arc tangent of x 9 45 double atanh double x Returns the hyperbolic arc tangent of x t 9 46 float atanhf float x Returns the hyperbolic arc tangent of x t 9 46 double ceil double x Returns the smallest integer gt x expands inline 9 49 except when pi is used float ceilf float x Returns the smallest integer gt x expands inline 9 49 except when pi is used double cos double x Returns the cosine of x 9 51 float cosf float x Returns the cosine of x 9 51 double cosh double x Returns the hyperbolic cosine of x 9 51 float coshf float x Returns the hyperbolic cosine of x 9 51 double cot double x Returns the cotangent of x t 9 52 T Enhanced math function See section 9 3 8 on page 9 18 for information on accessing this function Run Time Support Functions 9 27 Summary of Run Time Support Functions and Macros c Floating point math functions math h cmath Function float cotf float x double coth double x float cothf float x double exp double x double exp10 double x float exp10f float x double exp2 double x float exp2f float x float expf float x double fabs double x floa
348. pheral functions that enhance the development process Figure 1 1 TMS320C6000 Software Development Flow Macro source files C C source files Linear assembly Assembler source Macro library Assembly optimized file Library of object files Run Time support ji Linker loran Executable COFF file 1 2 Debugging tools Software Development Tools Overview The following list describes the tools that are shown in Figure 1 1 Lj The assembly optimizer allows you to write linear assembly code without being concerned with the pipeline structure or with assigning registers It accepts assembly code that has not been register allocated and is unscheduled The assembly optimizer assigns registers and uses loop optimization to turn linear assembly into highly parallel assembly that takes advantage of software pipelining See Chapter 4 Using the Assembly Optimizer for information about invoking the assembly opti mizer writing linear assembly code sa files specifying functional units and using assembly optimizer directives The C C compiler accepts C C source code and produces C6000 assembly language source code A shell program an optimizer and an interlist utility are parts of the compiler E Theshell program enables you to compile assemble and link source modules in one step If any input file has a sa extension the shell pro gram invok
349. ple atan2 atan2f Syntax for C Syntax for C Defined in Description atan2 atan2f In this example an integer i is divided by another integer j Since dividing by 0 is an illegal operation the example uses the assert macro to test j before the division If j 0 assert issues a message and aborts the program int sa assert j q i 3 Polar Arc Tangent include lt math h gt double atan double x float atanf float x include lt cmath gt double std atan double x float std atanf float x atan c and atanf c in rts src The atan and atanf functions return the arc tangent of a floating point argu ment x The return value is an angle in the range 71 2 1 2 radians double realval radians realval 0 0 radians atan realval radians 0 0 Cartesian Arc Tangent include lt math h gt double atan2 double y double x float atan2f float y float x include lt cmath gt double std atan2 double y double x float std atan2f float y float x atan2 c and atan2f c in rts src The atan2 and atan2f functions return the inverse tangent of y x The function uses the signs of the arguments to determine the quadrant of the return value Run Time Support Functions 9 45 atanh atanhf Example atanh atanhf Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C Defined in Description 9 46 Both arguments cannot be 0
350. port li braries that are shipped with the C6000 code generation tools Run Time Environment 8 45 System Initialization 8 8 1 Automatic Initialization of Variables Some global variables must have initial values assigned to them before a C C program starts running The process of retrieving these variables data and intializing the variables with the data is called autoinitialization The compiler builds tables in a special section called cinit that contains data for initializing global and static variables Each compiled module contains these initialization tables The linker combines them into a single table a single cinit section The boot routine or a loader uses this table to initialize all the system variables Co 7 4 30 ol Note Initializing Variables In ANSI C global and static variables that are not explicitly initialized are set to 0 before program execution The C6000 C C compiler does not perform any preinitialization of uninitialized variables Explicitly initialize any variable that must have an initial value of 0 The easiest method is to have the stand alone simulator using the b option clear the bss section before the program starts running Another method is to set a fill value of 0 in the linker control map for the bss section You cannot use these methods with code that is burned into ROM A e Global variables are either autoinitialized at run time or at load time For infor
351. ptimization but do not want definition controlled inlining Using the C C Compiler 2 37 Using Inline Function Expansion 2 10 4 Guarded inlining and the _INLINE Preprocessor Symbol 2 38 When declaring a function in a header file as static inline additional proce dures should be followed to avoid a potential code size increase when inlining is turned off with pi or the optimizer is not run In order to prevent a static inline function in a header file from causing an increase in code size when inlining gets turned off use the following proce dure This allows external linkage when inlining is turned off thus only one function definition will exist throughout the object files Lj Prototype a static inline version of the function Then prototype an alterna tive nonstatic externally linked version of the function Conditionally pre process these two prototypes with the _INLINE preprocessor symbol as shown in Example 2 2 J Create an identical version of the function definition in a c or cpp file as shown in Example 2 2 In Example 2 2 there are two definitions of the strlen function The first in the header file is an inline definition This definition is enabled and the prototype is declared as static inline only if_ INLINE is true _INLINE is automatically de fined for you when the optimizer is used and pi is not specified The second definition for the library ensures that the callable version of strlen e
352. ption feof Absolute Value include lt math h gt double fabs double x float fabsf float x include lt cmath gt double std fabs double x float std fabsf float x fabs c in rts src The fabs and fabsf functions return the absolute value of a floating point num ber x double x y x DeD y fabs x return value 57 5 Close File include lt stdio h gt int fclose FILE _ fp include lt cstdio gt int std fclose FILE _fp fclose c in rts src The fclose function flushes the stream that _fp points to and closes the file associated with that stream Test EOF Indicator include lt stdio h gt int feof FILE _fp include lt cstdio gt int std feof FILE _ fp feof c in rts src The feof function tests the EOF indicator for the stream pointed to by _ fp Run Time Support Functions 9 57 ferror Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C Defined in Description 9 58 Test Error Indicator include lt stdio h gt int ferror FILE _fp include lt cstdio gt int std ferror FILE _fp ferror c in rts src The ferror function tests the error indicator for the stream pointed to by _ fp Flush I O Buffer include lt stdio h gt int fflush register FILE _fp include lt cstdio gt int std fflu
353. pts you must handle any required enabling or masking of interrupts Such operations have no effect on the C C environ ment and are easily incorporated with asm statements or calling an assembly language function 8 6 1 Saving Registers During Interrupts When C C code is interrupted the interrupt routine must preserve the con tents of all machine registers that are used by the routine or by any functions called by the routine The compiler handles register preservation if the inter rupt service routine is written in C C 8 6 2 Using C C Interrupt Routines A C C interrupt routine is like any other C C function in that it can have local variables and register variables however it should be declared with no arguments and should return void C C interrupt routines can allocate up to 32K on the stack for local variables For example interrupt void example void If a C C interrupt routine does not call any other functions only those regis ters that the interrupt handler attempts to define are saved and restored How ever if a C C interrupt routine does call other functions these functions can modify unknown registers that the interrupt handler does not use For this rea son the routine saves all usable registers if any other functions are called Interrupts branch to the interrupt return pointer IRP Do not call interrupt han dling functions directly Interrupts can be handled directly with C C func
354. qual to string2 gt 0 if string1 is greater than string2 Copies string src into dest expands inline except 9 91 when pi is used h String functions string h cstring Continued Function size_t strespn register const char string const char chs char strerror int errno size_t strlen const char string char strncat char dest const char src register size_t n int strncmp const char string1 const char string2 size_t n char strncpy register char dest register const char src register size_t n char strpbrk const char string const char chs char strrehr const char string int c size_t strspn register const char string const char chs char strstr register const char string1 const char string2 char strtok char str1 const char str2 size_t strxfrm register char to register const char from register size_t n Summary of Run Time Support Functions and Macros Description Returns the length of the initial segment of string that is made up entirely of characters that are not in chs Maps the error number in errno to an error mes sage string Returns the length of a string Appends up to n characters from src to dest Compares up to n characters in two strings ex pands inline except when pi is used Copies up to n characters from src to dest ex pands inline except when pi is used Locates the first occurren
355. r enced in the procedure are live in If you do not specify any registers with the endproc directive it is assumed that no registers are live out Only code within procedures is optimized The assembly optimizer copies any code that is outside of procedures to the output file and does not modify it Here is a block move example in which proc and endproc are used move proc A4 B4 BO no_mdep loop LDW B4 Al MV Al Bl STW Bl A4 ADD 4 BO BO BO B loop endproc Define a Procedure proc endproc The following types of instructions are not allowed in proc or cproc see page 4 19 and 4 26 regions m Instructions that reference the stack pointer register B15 are not allowed in a proc or cproc region Stack space can be allocated by the assembly optimizer in a proc or cproc region for storage of temporary values To allocate this storage area the stack pointer is decremented on entry to the region and incremented on exit from the region Since the stack pointer can change value on entry to the region the assembly optimizer does not allow code that references the stack pointer register Indirect branches are not allowed in a proc or cproc region so that the proc or cproc region exit protocols cannot be bypassed Here is an example of an indirect branch B B4 lt illegal Direct branches to labels not defined in the proc or cproc region are not allowed so that the proc or cproc region exit pro
356. r an object file fp filename for a C source file For example if you have aC source file called file s and an assembly language source file called assy use the fa and fc options to force the correct interpretation cl6x fc file s fa assy You cannot use the fa fc fl and fo options with wildcard specifications The fg option causes the compiler to process C files as C files By default the compiler treats files with a c extension as C files See section 2 3 2 Speci fying Filenames on page 2 18 for more information about filename extension conventions Using the C C Compiler 2 19 Changing the Compiler s Behavior With Options 2 3 4 Changing How the Shell Program Interprets and Names Extensions ea ec 2 20 el eo and ep Options You can use options to change how the shell program interprets filename ex tensions and names the extensions of the files that it creates The ea el and e0 options must precede the filenames they apply to on the command line You can use wildcard specifications with these options An extension can be up to nine characters in length Select the appropriate option for the type of extension you want to specify eal new extension for an assembly language file ec new extension for a C source file el new extension for a linear assembly source file eo new extension for an object file ep new extension for a C source fi
357. r assembly to the output file It attaches characters to the comments to specify what iteration of the loop an instruction is on in the software pipeline See section 4 3 3 Using Linear Assembly Source Com ments on page 4 14 for an illustration of the use of source comments and the resulting assembly optimizer output Linear Assembly Source Statement Format A source statement can contain five ordered fields label mnemonic unit specifier operand list and comment The general syntax for source state ments is as follows label register mnemonic unit specifier operand list comment label Labels are optional for all assembly language instructions and for most but not all assembly optimizer directives When used a label must begin in column 1 of a source state ment A label can be followed by a colon register Square brackets enclose conditional instructions The machine instruction mnemonic is executed based on the value of the register within the brackets valid register names are AO for C6400 only A1 A2 BO B1 B2 or symbolic mnemonic The mnemonic is a machine instruction such as ADDK MVKH B or assembly optimizer directive such as proc trip unit specifier The unit specifier enables you to specify the functional unit What You Need to Know to Write Linear Assembly operand list The operand list is not required for all instructions or direc tives The operands can be
358. r safety the example loop requires that array data referenced within this loop be preceded and followed by a pad of at least 5 bytes This pad can con sist of other program data The pad will not be modified In many cases the threshold value namely the minimum value of the argument to mh that is needed to achieve a particular schedule and level of collapsing is the same as the pad However when it is not the comment block will also include the minimum threshold value In the case of this loop the threshold value must be at least 7 to achieve this level of collapsing Another interesting question that arises is whether there is a larger threshold value which would facilitate additional collapsing If there is this information will also be provided For example in the above comment block a threshold value of 14 might facilitate further collapsing Optimizing Software Pipelining You may be able to help the compiler avoid producing redundant loops with the use of pm 03 see section 3 6 on page 3 20 or the MUST_ITERATE pragma see section 7 7 14 on page 7 28 SS OSE ES EF EEL Note Turning Off Redundant Loops Specifying any ms option turns off redundant loops 3 2 4 Selecting Target CPU Version mv Option Select the target CPU version using the last four digits of the TMS320C6000 part number This selection controls the use of target specific instructions and alignment such as mv6701 or mv6412 Alternatively
359. ract inspect and modify any of the math functions Be sure however that you follow the calling conventions and register saving rules outlined in this chapter Table 8 4 summarizes the run time support functions used for arith metic Table 8 4 Summary of Run Time Support Arithmetic Functions Type Function Description float _cvtdf double Convert double to float int _fixdi double Convert double to signed integer long _fixdli double Convert double to long uint _fixdu double Convert double to unsigned integer ulong _fixdul double Convert double to unsigned long double _cvttfd float Convert float to double int _fixfi float Convert float to signed integer long _fixfli float Convert float to long uint _fixfu float Convert float to unsigned integer ulong _fixful float Convert float to unsigned long double _fitid int Convert signed integer to double float _fltif int Convert signed integer to float double _fltud uint Convert unsigned integer to double float _fltuf uint Convert unsigned integer to float float _fitlif long Convert signed long to float Run Time Environment 8 43 Run Time Support Arithmetic Routines 8 44 Table 8 4 Summary of Run Time Support Arithmetic Functions Continued Type Function double _fltlid long double _fltuld ulong float _fltulf ulong Description Convert signed long to double Convert unsigned long to double Convert unsigned long to float do
360. ragma The INTERRUPT pragma enables you to handle interrupts directly with C code In C the argument func is the name of a function In C the pragma applies to the next function declared The syntax of the pragma in C is pragma INTERRUPT func The syntax of the pragma in C is pragma INTERRUPT The code for the function will return via the IRP interrupt return pointer Except for _c_int00 which is the name reserved for the system reset interrupt for C programs the name of the interrupt the func argument does not need to conform to a naming convention TMS320C6000 C C Language Implementation 7 27 Pragma Directives 7 7 14 The MUST_ITERATE Pragma 7 28 The MUST_ITERATE pragma specifies to the compiler certain properties of a loop You guarantee that these properties are always true Anytime the UNROLL pragma is applied to a loop MUST_ITERATE should be applied to the same loop Here the MUST_ITERATE pragma s third argument multiple is the most important and should always be specified Furthermore the MUST_ITERATE pragma should be applied to any other loops as often as possible This is because the information provided via the pragma especially the minimum number of iterations aids the compiler in choosing the best loops and loop transformations that is software pipelining and nested loop transformations It also helps the compiler reduce code size No statements are allowed b
361. ragma 7 30 struct_tm datatype 9 22 structure defined A 8 structure members 7 4 strxfrm function 9 101 STYP_CPY flag 5 11 suppressing diagnostic messages 2 31 to 2 32 Switch section allocating in memory 5 11 described 8 3 symbol defined A 9 symbol table creating labels 2 22 defined A 9 Index 17 Index symbolic cross reference 2 22 debugging defined A 9 generating directives 2 15 symbols assembler defined 2 22 case sensitivity 2 22 undefining assembler defined symbols 2 22 sysmem section allocating in memory 5 11 described 8 3 _SYSMEM_SIZE 8 5 system initialization described 8 45 initialization tables 8 47 system stack 8 4 t standalone simulator option 6 5 tan function 9 102 tanf function 9 102 tangent functions 9 102 tanh function 9 102 tanhf function 9 102 target system defined A 9 temporary file creation function 9 103 test an expression function 9 44 test EOF function 9 57 test error function 9 58 text section allocating in memory 5 11 defined A 9 described 8 3 _TILENHANCED_MATH_H symbol 9 18 time function 9 103 time functions asctime function 9 43 clock function 9 50 ctime function 9 53 described 9 22 difftime function 9 53 gmtime function 9 67 localtime 9 69 mktime 9 76 strftime function 9 93 Index 18 time functions continued summary of 9 36 time function 9 103 __TIME__ macro 2 25 time h header described 9 22 to 9 23 summary of functions 9 36 time_tdatatype 9 22 TMP_MAX
362. rary Build Utility Topic Page 9 17 Libraries Ea teretsneyenatecstepeyaretefencyayecenrietaiare aterclaye E eversvarer ster atete 9 2 Ces mhe CIO FUNCtionS pacosmnaaceoeaudenohoopmouno apace snenneauae 9 4 9 3 Header Files Tea aE E E E 9 13 9 4 Summary of Run Time Support Functions and Macros 9 25 9 5 Description of Run Time Support Functions and Macros 9 37 9 1 Libraries 9 1 Libraries The following libraries are included with the TMS320C6000 C C compiler Lj rts6200 lib rts6400 lib and rts6700 lib run time support object libraries for use with little endian C C code Lj rts6200e lib rts6400e lib and rts6700e lib run time support object libraries for use with big endian C C code Q rts src run time support source library The run time support object libraries are built from the C C and assembly source contained in the rts src library The run time support libraries do not contain functions involving signals and locale issues They do contain the following ANSI C C standard library C I O library Low level support functions that provide I O to the host operating system Intrinsic arithmetic routines System startup routine _c_int00 Functions and macros that allow C C to access specific instructions O O O O O L You can control how the run time support functions are called in terms of near or far calls with the mr option For more information see section 7 4 4
363. rchive from the library and leaves them in the current directory after the utility completes execution h Uses header files contained in the source archive and leaves them in the current directory after the utility completes execution Use this option to install the run time support header files from the rts src archive that is shipped with the tools k Overwrites files By default the utility aborts any time it attempts to create an object file when an object file of the same name al ready exists in the current directory regardless of whether you specified the name or the utility derived it q Suppresses header information quiet u Does not use the header files contained in the source archive when building the object library If the desired headers are already in the current directory there is no reason to reinstall them This option gives you flexibility in modifying run time support functions to suit your application V Prints progress information to the screen during execution of the utility Normally the utility operates silently no screen messages 10 4 Options Summary Options Summary The other options you can use with the library build utility correspond directly to the options used with the compiler and assembler Table 10 1 lists these options These options are described in detail on the indicated page below Table 10 1 Summary of Options and Their Effects a Options that control the compiler sh
364. rectory Effect Specifies an absolute listing file directory Specifies an assembly listing file and cross reference listing file directory Specifies an object file directory Specifies an assembly file directory Specifies a temporary file directory e Options that are machine specific Option ma mb mrn msn Effect Indicates that a specific aliasing technique is used Compiles C6400 code compatible with array align ment restrictions of version 4 0 tools or C6200 C6700 object code Prevents reordering of associative floating point operations Produces object code in big endian format Allows speculative execution Specifies an interrupt threshold value Changes near and far assumptions on four levels ml0 ml1 and ml2 and ml3 Turns on function subsections Make calls to run time support functions near mr0 or far mr1 Controls code size on four levels msO ms1 ms2 and ms3 Allows the compiler to make certain assumptions about aliasing and loops Turns off software pipelining Selects target version Using the C C Compiler Page 2 21 2 21 2 21 2 21 2 21 Page 3 25 2 42 3 28 2 16 3 13 2 44 2 16 5 14 7 12 3 17 3 26 4 44 3 5 3 15 2 9 Changing the Compiler s Behavior With Options Table 2 1 2 10 Shell Options Summary Continued f Options that control parsing Option Effect Enables embedded C mode
365. rgument of cproc is register B6 This is allowed since the fourth argument in the C C calling conventions is passed in B6 The sixth argument of cproc is the actual register pair B9 B8 This is allowed since the sixth argument in the C C calling conventions is passed in B8 or B9 B8 for longs If you are calling a procedure from C source you must use the appropriate linkname for the procedure label Otherwise you can force C naming conven tions by using the extern C declaration See section Generating Linknames on page and section 8 5 Interfacing C C with Assembly Language on page 8 22 for more information When endproc is used with a cproc directive it cannot have arguments The live out set for a cproc region is determined by any return directives that appear in the cproc region A value is ive outif it has been defined before or within the procedure and is used as an output from the procedure Returning a value from a cproc region is handled by the return directive The return branch is automatically generated in a cproc region See page 4 31 for information on the return directive Only code within procedures is optimized The assembly optimizer copies any code that is outside of procedures to the output file and does not modify it See page 4 27 for a list of instruction types that cannot be used in cproc regions Define a C Callable Procedure cproc endproc Example Here is an example in which cpr
366. rict type qualifier with pointers void foo int restrict a int restrict b foo s code here Example 7 3 illustrates using the restrict keyword when passing arrays to a function Here the arrays c and d should not overlap nor should c and d point to the same array Example 7 3 Use of the restrict type qualifier with arrays 7 14 void funcl int c restrict int d restrict ENE ip for i 0 i lt 64 i elil d i d i 1 Keywords 7 4 6 The volatile Keyword The optimizer analyzes data flow to avoid memory accesses whenever possible If you have code that depends on memory accesses exactly as written in the C C code you must use the volatile keyword to identify these accesses A variable qualified with a volatile keyword is allocated to an unini tialized section as opposed to a register The compiler does not optimize out any references to volatile variables In the following example the loop waits for a location to be read as OxFF unsigned int ctrl while ctrl 0OxFF In this example ctrl is a loop invariant expression so the loop is optimized down to a single memory read To correct this define ctrl as volatile unsigned int ctrl Here the ctrl pointer is intended to reference a hardware location such as an interrupt flag TMS320C6000 C C Language Implementation 7 15 Register Variables 7 5 Register Variables
367. ring Copy include lt string h gt char strcpy register char dest register const char src include lt cstring gt char std strepy register char dest register const char src strcpy c in rts src The strcpy function copies src including a terminating null character into dest If you attempt to copy strings that overlap the function s behavior is undefined The function returns a pointer to dest In the following example the strings pointed to by a and b are two separate and distinct memory locations In the comments the notation 0 represents the null character char al char b The quick black fox jumps over ee a gt The quick black fox 0 b gt jumps over 0 strcpy a b a gt jumps over 0 EY b gt jumps over 0 EM Run Time Support Functions 9 91 strcspn Syntax for C Syntax for C Defined in Description Example Syntax for C Syntax for C Defined in Description 9 92 Find Number of Unmatching Characters include lt string h gt size_t strespn register const char string const char chs include lt cstring h gt size_t std strespn register const char string const char chs strcspn c in rts src The strcspn function returns the length of the initial segment of string which is made up entirely of characters that are not in chs If the first character in string is in chs the function returns
368. rming Program Level Optimization pmiand O3iOptions meerets eres tert otter teeter tates 3 20 3 7 Indicating Whether Certain Aliasing Techniques Are Used 3 25 3 8 Prevent Reordering of Associative Floating Point Operations 3 28 3 9 Use Caution With asm Statements in Optimized Code 3 28 3 10 Automatic Inline Expansion oi Option 5 3 29 3 11 Using the Interlist Utility With the Optimizer 3 30 3 12 Debugging and Profiling Optimized Code 3 33 3 13 What Kind of Optimization Is Being Performed 3 35 3 1 Invoking Optimization 3 1 Invoking Optimization The C C compiler is able to perform various optimizations High level opti mizations are performed in the optimizer and low level target specific opti mizations occur in the code generator The high level optimizer runs as a separate pass between the parser and the code generator Figure 3 1 illustrates the execution flow of the compiler with the stand alone optimizer and code generator Figure 3 1 Compiling a C C Program With the Optimizer C C Parser O timizer Code source file gt P r gt generator The easiest way to invoke optimization is to use the cl6x shell program speci fying the on option on the cl6x command line The n denotes the level of opti mization 0 1 2 and 3 which controls the type and degree of optimization l e
369. roc reg reg reg ADD ADD MVK ZERO ZERO Y M1 M1 VOU Kas M2 PYH M2 DD DD Pre eee n UB w ADD return endproc a_0 b_0 a_4 b_4 cnt tmp prodl prod2 prod3 prod4 valA valB sum0 suml sum 4 a0 a4 4 b_0 b_4 100 cnt sum0 sum1 xa_0 2 valA load a 0 1 b_0 2 valB load b 0 1 valA valB prodl a 0 b 0 valA valB prod2 a l b l prodl prod2 tmp sum0 a 0 b O tmp sum0 sum0 a 1 a 1 xa_4 2 valA load a 2 3 b_4 2 valB load b 2 3 valA valB prod3 a 2 b 2 valA valB prod4 a 3 b 3 prod3 prod4 tmp suml a 0 b 0O tmp suml suml a 1 a 1 ent 4 cne cnt 4 loop if 10y goto loop sum0 suml sum compute final result sum Using the Assembly Optimizer 4 13 What You Need to Know to Write Linear Assembly The resulting kernel from Example 4 5 is shown in Example 4 6 Example 4 6 Software Pipeline Kernel for Computing a Dot Product With Example 4 5 loop PIPED LOOP KERNEL B2 SUB L2 B2 4 B2 ADD L1 A4 A3 A3 20 sum0 a 0 b O ADD S2 B8 B4 B4 28 a l aLL MPYH M1X B9 A8 A3 19 a l b 1 BO B S1 loop 31 if 0 goto loop MPY M2X A5 B1 B7 25 a 2 b 2 B2 LDW D2T2 B5 8 B9 16 load a 0 1 B2 LDW D1T1 A7 8 A8 17 load b 0 1 Al SU
370. rogramming Embedded Systems in C and C by Michael Barr Andy Oram Editor published by O Reilly amp Associates ISBN 1565923545 February 1999 The C Programming Language second edition by Brian W Kernighan and Dennis M Ritchie published by Prentice Hall Englewood Cliffs New Jersey 1988 The Annotated C Reference Manual Margaret A Ellis and Bjame Stroustrup published by Addison Wesley Publishing Company Reading Massachusetts 1990 The C Programming Language second edition Bjame Stroustrup pub lished by Addison Wesley Publishing Company Reading Massachusetts 1990 Solaris and SunOS are trademarks of Sun Microsystems Inc UNIX is a registered trademark in the United States and other countries licensed exclusively through X Open Company Limited Windows and Windows NT are registered trademarks of Microsoft Corpora tion The Texas Instruments logo and Texas Instruments are registered trademarks of Texas Instruments Incorporated Trademarks of Texas Instruments include TI XDS Code Composer Code Composer Studio TMS320 TMS320C6000 and 320 Hotline On line All other brand or product names are trademarks or registered trademarks of their respective companies or organizations Contents MOJUTO secme Ne cnet tele aee lam Gee cet ie es eet oe alee de 1 1 Provides an overview of the TMS320C6000 software development tools specifically the opti mizing C compiler 1 1 Software Development Tools Overvi
371. rupts can be disabled The min option specifies an interrupt threshold value n The threshold value specifies the maximum number of cycles that the compiler can disable inter rupts If the nis omitted the threshold the compiler assumes that the code is never interrupted In Code Composer Studio to specify that the code is never interrupted select the Interrupt Threshold check box and leave the text box blank in the Build Options dialog box on the Compiler tab Advanced category Interrupts are only disabled around software pipelined loops When using the min option the compiler analyzes the loop structure and loop counter to determine the maximum number of cycles it will take to execute a loop If it can determine that the maximum number of cycles is less than the threshold value then the compiler will disable interrupts around the software pipelined loop Otherwise the compiler makes the loop interruptible which in most cases degrades the performance of the loop The min option does not comprehend the effects of the memory system When determining the maximum number of execution cycles for a loop the compiler does not compute the effects of using slow off chip memory or memory bank conflicts It is recommended that a conservative threshold value is used to adjust for the effects of the memory system See section 7 7 7 The FUNC_INTERRUPT_THRESHOLD Pragma on page 7 24 or the TMS320C6000 Programmer s Guide for more information
372. s The code in the following example is invalid because you cannot use a vari able defined by the reg directive with the proc directive move prot dst Sr amp ent WRONG You cannot use a reg dst src cnt variable with proc This example could be corrected as follows move seproe dst sre cnt Declare Variables reg Example 3 The code in the following example is invalid because a variable defined by the reg directive cannot be used outside of the defined procedure move proc A4 reg tmp LDW A4 tmp MV tmp B5 endproc MV tmp B6 WRONG tmp is invalid outside of the procedure Using the Assembly Optimizer 4 29 reserve Reserve a Register Syntax Description Example 1 Example 2 4 30 reserve register registers The reserve directive prevents the assembly optimizer from using the speci fied register in a proc or cproc region If a reserved register is explicitly assigned in a proc or cproc region then the assembly optimizer can also use that register For example the variable tmp1 can be allocated to register A7 even though it is in the reserve list since A7 was explicitly defined in the ADD instruction cproc reserve a7 reg tmp1 ADD a6 b4 a7 endproc eee ee ee ee OEE al Note Reserving Registers A4 and A5 When inside of a cproc region that contains a call statement A4 and A5 can not be specified in a reserve statement The calli
373. s The compiler assigns linknames to all external objects Thus when you are writing assembly language code you must use the same linknames as those assigned by the compiler For identifiers that are to be used only in an assembly language module or modules the identifier should not begin with an underscore _ See section 7 8 Generating Linknames on page 7 32 for more information Any object or function declared in assembly language that is accessed or called from C C must be declared with the def or global directive in the assembler This declares the symbol as external and allows the linker to resolve references to it Likewise to access a C C function or object from assembly language declare the C C object with ref or global This creates an undeclared external reference that the linker resolves Run Time Environment 8 23 Interfacing C and C With Assembly Language Example 8 1 illustrates a C function called main which calls an assembly language function called asmfunc The asmfunc function takes its single argument adds it to the C global variable called gvar and returns the result Example 8 1 Calling an Assembly Language Function From C a C program extern C extern int asmfunc int a ef int gvar 4 void main int i 5 i asmfunc I declare external as function define global variable call function normally b Assembly la
374. s global bss A opt 6x O2 t3 if t3 opt text _main D2 B14 _x B4 T S2 B3 2 SD2 1 B4 B4 D2 B4 B14 _y D2 B4 B14 _x BRANCH OCCURS X _X 4 4 Y _y 4 4 3 13 12 Software Pipelining Software pipelining is a technique use to schedule from a loop so that multiple iterations of a loop execute in parallel See section 3 2 Optimizing Software Pipelining on page 3 4 for more information Optimizing Your Code 3 45 3 46 Chapter 4 Using the Assembly Optimizer The assembly optimizer allows you to write assembly code without being concerned with the pipeline structure of the C6000 or assigning registers It accepts linear assembly code which is assembly code that may have had register allocation performed and is unscheduled The assembly optimizer as signs registers and uses loop optimizations to turn linear assembly into highly parallel assembly Topic Page 4 1 Code Development Flow to Increase Performance 4 2 4 2 About the Assembly Optimizer 0ceeee cece eee eee eee 4 4 4 3 What You Need to Know to Write Linear Assembly 4 4 4 4 Assembly Optimizer Directives 0eeee eee e eee eee 4 16 4 5 Avoiding Memory Bank Conflicts With the Assembly Optimizer 00 cece eee eee erence ee 4 34 4 6 Memory Alias Disambiguation cece eee eee e eens 4 44 4 1 Code Development Flow to
375. s Sets a default extension for C source files Sets a default extension for linear assembly source files Sets a default extension for object files Sets a default extension for C source files c Options that specify files Option fafilename fcfilename fg filename flfilename fofilename fp filename Effect Identifies filename as an assembly source file regard less of its extension By default the compiler and assembler treat asm files as assembly source files Identifies filename as a C source file regardless of its extension By default the compiler treats c files as C source files Processes a C filename as a C file Identifies filename as a linear assembly source file regardless of its extension By default the compiler and assembly optimizer treat sa files as linear as sembly source files Identifies filename as an object code file regardless of its extension By default the compiler and linker treat obj files as object code files Identifies filename as a C file regardless of its extension By default the compiler treats C cpp cc and cxx files as a C files Page 2 20 2 20 2 20 2 20 2 20 Page 2 19 2 19 2 19 2 19 2 19 2 19 Changing the Compiler s Behavior With Options Table 2 1 Shell Options Summary Continued d Options that specify directories Option fodirectory ffdirectory frdirectory fsdirectory ftdi
376. s including conditional instructions labels and operands Using the Assembly Optimizer 4 7 What You Need to Know to Write Linear Assembly 4 3 2 Functional Unit Specification for Linear Assembly 4 8 You specify a functional unit by following the assembler instruction with a period and a functional unit specifier One instruction can be assigned to each functional unit in a single instruction cycle There are eight functional units two of each functional type and two address paths The two of each functional type are differentiated by the data path each uses A or B D1 and D2 Data addition subtraction operations L1 and L2 Arithmetic logic unit ALU compares long data arithmetic M1 and M2 Multiply operations S1 and S2 Shift ALU branch field operations T1 and T2 Address paths There are several ways to use the unit specifier field in linear assembly _j You can specify the particular functional unit for example D1 _j You can specify the D1 or D2 functional unit followed by T1 or T2 to specify that the nonmemory operand is on a specific register side T1 specifies side A and T2 specifies side B For example LDW D1T2 A3 A4 B3 LDW D1T2 src dst _j You can specify only the functional type for example M and the assembly optimizer assigns the specific unit for example M2 Lj You can specify only the data path for example 1 and the assembly optimizer assigns the functional t
377. s 4 4 What You Need to Know to Write Linear Assembly 0 0 0 0 eee eee eee 4 4 4 3 1 Linear Assembly Source Statement Format 0 00 0ceeeeeeeeee 4 6 4 3 2 Functional Unit Specification for Linear Assembly 0200055 4 8 4 3 3 Using Linear Assembly Source Comments 00 00 eee ee ence ees 4 14 Assembly Optimizer Directives 000 cece eee eee 4 16 Avoiding Memory Bank Conflicts With the Assembly Optimizer 4 34 4 5 1 Preventing Memory Bank Conflicts 00 eee 4 35 4 5 2 A Dot Product Example That Avoids Memory Bank Conflicts 4 38 4 5 3 Memory Bank Conflicts for Indexed Pointers 0 000 c cece eee 4 42 4 5 4 Memory Bank Conflict Algorithm 006 000 cece eee 4 43 Memory Alias Disambiguation 000 c cee eee 4 44 4 6 1 How the Assembly Optimizer Handles Memory References Default 4 44 4 6 2 Using the mt Option to Handle Memory References 4 44 4 6 3 Using the no_mdep Directive 0 2 cece 4 44 4 6 4 Using the mdep Directive to Identify Specific Memory Dependences 4 45 4 6 5 Memory Alias Examples 0 0 0 c cece eee eee eee 4 47 Contents ix Contents 5 Linking C C Code ec inc2n ancora anasa oka cu te a a a a ede Gan ee eee sca 5 1 Describes how to link using a stand alone program or with the compiler shell and how to meet the special requirements of linking
378. s and only a few are required for an executable This situation may exist in libraries where a single file contains multiple func tions but the application only needs a subset of those functions An example is alibrary obj file that contains a signed divide routine and an unsigned divide routine If the application requires only signed division then only the signed divide routine is required for linking By default both the signed and unsigned routines are linked in since they exist in the same obj file The mo shell option remedies this problem by placing each function in a file in its own subsection Thus only the functions that are referenced in the ap plication are linked into the final executable This can result in an overall code size reduction However be aware that using the mo shell option can result in overall code size growth if all or nearly all functions are being referenced This is because any section containing code must be aligned to a 32 byte boundary to support the C6000 branching mechanism When the mo option is not used all func tions in a source file are usually placed in a common section which is aligned When mo is used each function defined in a source file is placed in a unique section Each of the unique sections requires alignment If all the functions in the file are required for linking code size may increase due to the additional alignment padding for the individual subsections Thus the
379. s from device to device See the appropriate device data sheet to determine the memory spaces in your partic ular device This section discusses how to write code to avoid memory bank conflicts Most C6000 devices use an interleaved memory bank scheme as shown in Figure 4 1 Each number in the diagram represents a byte address A load byte LDB instruction from address 0 loads byte 0 in bank 0 A load halfword LDH from address 0 loads the halfword value in bytes 0 and 1 which are also in bank 0 A load word LDW from address 0 loads bytes 0 through 3 in banks 0 and 1 Because each bank is single ported memory only one access to each bank is allowed per cycle Two accesses to a single bank in a given cycle result in a memory stall that halts all pipeline operation for one cycle while the second value is read from memory Two memory operations per cycle are allowed without any stall as long as they do not access the same bank Figure 4 1 4 Bank Interleaved Memory 4 34 For devices that have more than one memory space Figure 4 2 an access to bank 0 in one memory space does not interfere with an access to bank 0 in another memory space and no pipeline stall occurs Avoiding Memory Bank Conflicts With the Assembly Optimizer Figure 4 2 4 Bank Interleaved Memory With Two Memory Spaces Memory space 0 Memory space 1 Bank 0 Bank 1 Bank 2 Bank 3 4 5 1 Preve
380. s src The fopen function opens the file that _fname points to The string pointed to by _mode describes how to open the file Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C Defined in Description fputs Write Stream include lt stdio h gt int fprintf FILE _ fp const char _ format include lt cstdio gt int std fprintf FILE _fp const char _ format fprint c in rts src The fprintf function writes to the stream pointed to by _ fp The string pointed to by _format describes how to write the stream Write Character include lt stdio h gt int fputc int _c register FILE _fp include lt cstdio gt int std fputc int _c register FILE _fp fputc c in rts src The fputc function writes a character to the stream pointed to by _ fp Write String include lt stdio h gt int fputs const char _ptr register FILE _fp include lt cstdio gt int std fputs const char _ptr register FILE _fp fputs c in rts src The fputs function writes the string pointed to by _ ptr to the stream pointed to by _ fp Run Time Support Functions 9 61 fread Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C Defined in Description Example 9 62 Read Stream include lt stdio h gt size_t fread void _ptr size_t _size size_t count F
381. s used If multiple MUST_ITERATE pragmas are specified for the same loop the smallest max and largest min are used Pragma Directives 7 7 15 The NMI_LINTERRUPT Pragma The NMI_LINTERRUPT pragma enables you to handle non maskable inter rupts directly with C code In C the argument func is the name of a function In C the pragma applies to the next function declared The syntax of the pragma in C is pragma NMI_INTERRUPT func The syntax of the pragma in C is pragma NMI_INTERRUPT The code generated for the function will return via the NRP versus the IRP as for a function declared with the interrupt keyword or INTERRUPT pragma Except for _c_int00 which is the name reserved for the system reset interrupt for C programs the name of the interrupt function does not need to conform to a naming convention 7 7 16 The PROB_ITERATE Pragma The PROB_ITERATE pragma specifies to the compiler certain properties of a loop You assert that these properties are true in the common case The PROB_ITERATE pragma aids the compiler in choosing the best loops and loop transformations that is software pipelining and nested loop transforma tions PROB_ITERATE is useful only when the MUST_ITERATE pragma is not used or the PROB_ITERATE parameters are more constraining than the MUST_ITERATE parameters No statements are allowed between the PROB_ITERATE pragma and the for while or do while loop to which it applies H
382. se cproc without the corresponding endproc Specify a label with the cproc directive You can have multiple procedures in a linear assembly file The cproc directive differs from the proc directive in that the compiler treats the cproc region as a C C callable function The assembly optimizer performs some operations automatically in a cproc region in order to make the function conform to the C C calling conventions and to C C register usage conventions These operations include the following I When you use save on entry registers A10 to A15 and B10 to B15 the assembly optimizer saves the registers on the stack and restores their original values at the end of the procedure I If the compiler cannot allocate machine registers to symbolic register names specifed with the reg directive see page 4 28 it uses local tempo rary stack variables With cproc the compiler manages the stack pointer and ensures that space is allocated on the stack for these variables For more information see section 8 3 Register Conventions on page 8 16 and section 8 4 Function Structure and Calling Conventions on page 8 18 Please see the proc directive on page 4 27 for the types of instructions that cannot appear in a cproc region Use the optional variable to represent function parameters The variable entries are very similar to parameters declared in a C C function The argu ments to the cproc directive can be of the following types
383. se headers declare Run Time Support Functions 9 13 Header Files 9 3 1 Diagnostic Messages assert h cassert The assert h cassert header defines the assert macro which inserts diagnostic failure messages into programs at run time The assert macro tests a run time expression _j If the expression is true nonzero the program continues running _j Ifthe expression is false the macro outputs a message that contains the expression the source file name and the line number of the statement that contains the expression then the program terminates using the abort function The assert h cassert header refers to another macro named NDEBUG assert h cassert does not define NDEBUG If you have defined NDEBUG as amacro name when you include assert h cassert assert is turned off and does nothing If NDEBUG is not defined assert is enabled The assert h cassert header refers to another macro named NASSERT assert h cassert does not define NASSERT If you have defined NASSERT as a macro name when you include assert h cassert assert acts like _nassert The _nassert intrinsic generates no code and tells the optimizer that the expression declared with assert is true This gives a hint to the optimizer as to what optimizations might be valid If NASSERT is not defined assert is enabled normally The _nassert intrinsic can also be used to guarantee that a pointer has a cer tain alignment For more information see section 8 5 4 Usin
384. sed J K amp R syntax allows trailing tokens on preprocessor directives endif NAME illegal unless pk used 7 10 2 Enabling Strict ANSI Mode and Relaxed ANSI Mode ps and pr Options Use the ps option when you want to compile under strict ANSI mode In this mode error messages are provided when non ANSI features are used and language extensions that could invalidate a strictly conforming program are disabled Examples of such extensions are the inline and asm keywords Use the pr option when you want the compiler to ignore strict ANSI violations rather than emit a warning as occurs in normal ANSI mode or an error mes sage as occurs in strict ANSI mode In relaxed ANSI mode the compiler ac cepts extensions to the ANSI C standard even when they conflict with ANSI C 7 10 3 Enabling Embedded C Mode pe Option 7 36 The compiler supports the compilation of embedded C In this mode some features of C are removed that are of less value or too expensive to support in an embedded system Embedded C omits these C features Templates Exception handling Run time type information The new cast syntax The keyword mutable Multiple inheritance Virtual inheritance O O O O O O L Under the standard definition of embedded C namespaces and using declarations are not supported The C6000 compiler nevertheless allows these features under embedded C because the C runtime support library mak
385. setto null a buffer is allocated If _buf names a buff er that buffer is used for the stream The _size specifies the size of the buffer The _type specifies the type of buffering as follows _IOFBF Full buffering occurs _IOLBF Line buffering occurs _IONBF No buffering occurs Syntax for C Syntax for C Defined in Description Example sinh sinhf Syntax for C Syntax for C Defined in Description Example sinh sinhf Sine include lt math h gt double sin double x float sinf float x include lt cmath gt double std sin double x float std sinf float x sin c and sinf c in rts src The sin and sinf functions return the sine of a floating point number x The angle x is expressed in radians An argument with a large magnitude can pro duce a result with little or no significance double radian sval sin returns sval radian 3 1415927 sval sin radian sin returns approx 1 0 Hyperbolic Sine include lt math h gt double sinh double x float sinhf float x include lt cmath gt double std sinh double x float std sinhf float x sinh c and sinhf c in rts src The sinh and sinhf functions return the hyperbolic sine of a floating point num ber x A range error occurs if the magnitude of the argument is too large These functions are equivalent to eX e 2 but are computationally faster and more accurate double x y X Y 0 0 sinh x
386. sh register FILE _fp fflush c in rts src The fflush function flushes the I O buffer for the stream pointed to by _ fp Read Next Character include lt stdio h gt int fgetc register FILE _fp include lt cstdio gt int std fgetc register FILE _fp fgetc c in rts src The fgetc function reads the next character in the stream pointed to by _ fp Store Object include lt stdio h gt int fgetpos FILE _fp fpos_t pos include lt cstdio gt int std fgetpos FILE _fp fpos_t pos fgetpos c in rts src The fgetpos function stores the object pointed to by pos to the current value of the file position indicator for the stream pointed to by _ fp Syntax for C Syntax for C Defined in Description floor floorf Syntax for C Syntax for C Defined in Description Example floor floorf Read Next Characters include lt stdio h gt char fgets char _ptr register int _size register FILE _fp include lt cstdio gt char std fgets char _ptr register int _size register FILE _fp fgets c in rts src The fgets function reads the specified number of characters from the stream pointed to by _fp The characters are placed in the array named by _ ptr The number of characters read is _ size 1 Floor include lt math h gt double floor double x float floorf float x include lt cmath gt double std floor double x float std floorf float x floor c and floorf c
387. should correctly compile and run without modification label A symbol that begins in column 1 of an assembler source statement and corresponds to the address of that statement A label is the only assembler statement that can begin in column 1 linear assembly Assembly code that has not been register allocated or scheduled which is used as input for the assembly optimizer Linear as sembly files have a sa extension linker A software program that combines object files to form an object mod ule that can be allocated into system memory and executed by the de vice listing file An output file created by the assembler that lists source state ments their line numbers and their effects on the section program counter SPC little endian An addressing protocol in which bytes are numbered from right to left within a word More significant bytes in a word have higher num bered addresses Endian ordering is hardware specific and is deter mined at reset See also big endian live in A value that is defined before a procedure and used as an input to that procedure live out A value that is defined within a procedure and used as an output from that procedure loader A device that places an executable module into system memory loop unrolling An optimization that expands small loops so that each itera tion of the loop appears in your code Although loop unrolling increases code size it can improve the efficiency of your code
388. sion simplification 3 41 Inline expansion of run time support library functions 3 42 Induction variable optimizations and strength reduction 3 43 Loop invariant code motion 3 44 Loop rotation 3 44 Register variables 3 44 Register tracking targeting 3 44 Software pipelining 3 45 Optimizing Your Code 3 35 What Kind of Optimization Is Being Performed 3 13 1 Cost Based Register Allocation The optimizer when enabled allocates registers to user variables and compiler temporary values according to their type use and frequency Vari ables used within loops are weighted to have priority over others and those variables whose uses do not overlap can be allocated to the same register Induction variable elimination and loop test replacement allow the compiler to recognize the loop as a simple counting loop and software pipeline unroll or eliminate the loop Strength reduction turns the array references into efficient pointer references with autoincrements Example 3 4 Strength Reduction Induction Variable Elimination Register Variables 3 36 and Software Pipelining a C source int a 10 main AG dy i 0 i lt 10 i i 0 i ali What Kind of Optimization Is Being Performed Example 3 4 Strength Reduction Induction Variable Elimination Register Variables and Software Pipelining Continued b Compiler output
389. so that multiple iterations of the loop execute in parallel The code generation tools attempt to software pipeline your code with inputs from you and with information that it gathers from your program For more information see sec tion 3 2 Software Pipelining on page 3 4 To invoke the assembly optimizer use the shell program cl6x The assembly optimizer is automatically invoked by the shell program if one of your input files has a sa extension You can specify C C source files along with your linear assembly files For more information about the shell program see section 2 1 on page 2 2 4 3 What You Need to Know to Write Linear Assembly 4 4 By using the C6000 profiling tools you can identify the time critical sections of your code that need to be rewritten as linear assembly The source code that you write for the assembly optimizer is similar to assembly source code How ever linear assembly code does not include information about instruction latencies or register usage The intention is for you to let the assembly optimizer determine this information for you When you are writing linear as sembly code you need to know about these items Lj Assembly optimizer directives Your linear assembly file can be acombination of assembly optimizer code and regular assembly source Use the assembly optimizer directives to differentiate the assembly optimizer code from the regular assembly code and to provide the assembly optimizer wi
390. ss register offsets Lj Cannot allocate machine registers A software pipeline schedule was found but it cannot allocate machine registers for the schedule You must simplify the loop The register usage for the schedule found at the given ii is displayed This information can be used when writing linear assembly to balance register pressure on both sides of the register file For example ii 11 Cannot allocate machine registers Regs Live Always 3 0 A B side Max Regs Live 20 14 Max Condo Regs Live 2 1 m Regs Live Always The number of values that must be assigned a register for the duration of the whole loop body This means that these values must always be allocated registers for any given schedule found for the loop m Max Regs Live Maximum number of values live at any given cycle in the loop that must be allocated to a register This indicates the maxi mum number of registers required by the schedule found m Max Cond Regs Live Maximum number of registers live at any given cycle in the loop kernel that must be allocated to a condition register I Cycle count too high Not profitable With the schedule that the com piler found for the loop it is more efficient to use a non software pipelined version J Did notfind schedule The compiler was unable to find a schedule for the software pipeline at the given ii iteration interval You should simplify the loop and or eliminate loop carried dependencies J Itera
391. st Loading t out 174 Symbols loaded Done Interrupt to abort Hello world Time 133 cycles NORMAL COMPLETION 9873 cycles b The file clock out invoked with the a option load6x clock out TMS320C6x Standalone Simulator Version X X Copyright c 1989 2000 by Texas Instruments Incorporated OPTIONS C6xxx Memory Hierarchy Modeling Simulator OPTIONS REVISION 2 OPTIONS MAP 1 DEFAULT MEMORY MAPPING WARNING Ensure that map modes for linker cmd file and load6x are same NOTE For details on above options please refer to the readme 1st Loading t out 174 Symbols loaded Done Interrupt to abort Hello world Time 7593 cycles NORMAL COMPLETION 98705 cycles Using the Stand Alone Simulator 6 3 Stand Alone Simulator Options 6 2 Stand Alone Simulator Options 6 4 Following are the options that control the stand alone simulator along with descriptions of their effects a b d d f value 9 h O XXX map value q Enables data memory bank conflict checking Initializes all memory in the bss section data with Os The C language ensures that all uninitialized static storage class vari ables are initialized to O at the beginning of the program Because the compiler does not set uninitialized variables the b option enables you to initialize these variables Enables verbose mode Prints internal s
392. stead of from ROM and perform the initialization directly at load time instead of at run time You can specify this to the linker by using the cr linker option For more information see section 8 8 System Initialization on page 8 45 8 1 5 Memory Models 8 6 The compiler supports two memory models that affect how the bss section is allocated into memory Neither model restricts the size of the text or cinit sections I The small memory model which is the default requires that the entire bss section fit within 32K bytes 32 768 bytes of memory This means that the total space for all static and global data in the program must be less than 32K bytes The compiler sets the data page pointer register DP which is B14 during run time initialization to point to the beginning of the bss section Then the compiler can access all objects in bss global and static variables and constant tables with direct addressing without modi fying the DP I The large memory model does not restrict the size of the bss section unlimited space is available for static and global data However when the compiler accesses any global or static object that is stored in bss it must first load the object s address into a register before a global data item is accessed This task produces two extra assembly instructions For example the following compiler generated assembly language uses the MVKL and MVKH instructions to move the global variable _ x
393. t double std trunc double x float std truncf float x trunc c and truncf c in rts src The trunc and truncf functions return a floating point number equal to the nearest integer to x in the direction of 0 float x yy uy V3 KIS 235 y truncf x y 2 u 5 65 v truncf v vi 5 Write Character to Stream include lt stdlib h gt int ungetc int _c register FILE _fp include lt cstdlib gt int std ungetc int _c register FILE _fp ungetc c in rts src The ungetc function writes the character _c to the stream pointed to by _ fp Run Time Support Functions 9 105 va_arg va_end va_start va_arg va_end Variable Argument Macros va_start Syntax for C Syntax for C Defined in Description 9 106 include lt stdarg h gt typedef char va_list type va_arg va_list type void va_end va_list void va_start va_list parmN include lt cstdarg gt typedef char std va_list type std va_arg va_list _ type void std va_end va_list void std va_start va_list parmN stdarg h in rts src Some functions are called with a varying number of arguments that have vary ing types Such a function called a variable argument function can use the following macros to step through its argument list at run time The _ap param eter points to an argument in the variable argument list J The va_start macro initializes _ap to point to the first argument in an argument
394. t Data Storage Format 0 0 ccc nett eens 8 10 40 Bit Data Storage Format 0 0 e eens 8 11 Double Precision Floating Point Data Storage Format 2 0ce cece eee ee 8 12 Bit Field Packing in Big Endian and Little Endian Formats 2205 8 14 Register Argument Conventions ccc eee 8 19 Format of Initialization Records in the cinit Section 0 cece eee eee 8 47 Format of Initialization Records in the pinit Section 2 cece eee eee 8 49 Autoinitialization at Run Time 00 net eee ene 8 50 Initialization at Load Time cece nett ene es 8 51 Interaction of Data Structures in I O Functions 0000 eee eee eee ees 9 5 The First Three Streams in the Stream Table 000 cece eee eee ees 9 6 8 4 10 1 Tables Shell Options Summary 0000 ee eee e eens 2 7 Predefined Macro Names 0 0 cece ete eet ent eee 2 24 Raw Listing File Identifiers eeror a etre 0 cece cece eee I DEEA KEET REUT E 2 34 Raw Listing File Diagnostic Identifiers 0 0 cece eee ete 2 35 Options That You Can Use With 03 0 ccc eens 3 18 Selecting a Level for the ol Option neunana unanenn 3 18 Selecting a Level for the on Option 00 ccc eee ee eee tees 3 19 Selecting a Level for the op Option 0c cece eee eee 3 21 Special Considerations When Using the op Option
395. t char st long atol register const char st void bsearch register const void key register const void base size_t nmemb size_t size int compar const void const void void calloc size_t num size_t size div_t div register int numer register int denom void exit int status void free void packet char getenv const char _ string long labs long i Idiv_t Idiv register long numer register long denom int Itoa long val char buffer void malloc size_t size void memalign size_t alignment size_t size void minit void void qsort void base size_t nmemb size_t size int compar Summary of Run Time Support Functions and Macros Description Terminates a program abnormally Returns the absolute value of val expands inline Registers the function pointed to by fun called without arguments at program termination Converts a string to a floating point value expands inline except when pi is used Converts a string to an integer Converts a string to a long integer value expands inline except when pi is used Searches through an array of nmemb objects for the object that key points to Allocates and clears memory for num objects each of size bytes Divides numer by denom producing a quotient and a remainder Terminates a program normally Deallocates memory space allocated by malloc calloc or realloc Returns the environment information for the var
396. t fabsf float x double floor double x float floorf float x double fmod double x double y float fmodf float x float y double frexp double value int exp float frexpf float value int exp double Idexp double x int exp float Idexpf float x int exp double log double x double log10 double x float log10f float x double log2 double x float log2f float x float logf float x Description Returns the cotangent of x t Returns the hyperbolic cotangent of x t Returns the hyperbolic cotangent of x t Returns eX Returns 10 0 t Returns 10 0 t Returns 2 0 t Returns 2 0 t Returns eX Returns the absolute value of x Returns the absolute value of x Returns the largest integer lt x expands inline except when pi is used Returns the largest integer lt x expands inline except when pi is used Returns the exact floating point remainder of x y Returns the exact floating point remainder of x y Returns f and exp such that 5 lt f lt 1 and value is equal to f x 2 xp Returns f and exp such that 5 lt f lt 1 and value is equal to f x 2 xp Returns x x 2 amp XP Returns x x 2 amp XP Returns the natural logarithm of x Returns the base 10 logarithm of x Returns the base 10 logarithm of x Returns the base 2 logarithm of x t Returns the base 2 logarithm of x t Returns the natural logarithm of x T Enhanced math function See section 9 3 8 on page 9 18 for information
397. t is associated with the opened file or device Li The buffer is the location of the buffer where the write characters are placed Lj The count is the number of characters to write to the device or file The function returns one of the following values number of characters written if successful 1 if not successful The C I O Functions 9 2 2 Adding a Device for C I O The low level functions provide facilities that allow you to add and use adevice for I O at run time The procedure for using these facilities is 1 Define the device level functions as described in section 9 2 1 Overview of Low Level I O Implementation on page 9 5 Ua san ee a ay Note Use Unique Function Names The function names open close read and so on pages 9 7 to 9 10 are used by the low level routines Use other names for the device level func tions that you write S eee 2 Use the low level function add_device to add your device to the device_table The device table is a statically defined array that supports n devices where nis defined by the macro _NDEVICE found in stdio h cstdio The structure representing a device is also defined in stdio h cstdio and is composed of the following fields name String for device name flags Flags that specify whether the device supports multiple streams or not function pointers Pointers to the device level functions J CLOSE D LSEEK Lj OPEN g READ J RENAME J WRITE Lj UNLIN
398. t seek asm gt find sa Invoking the C C Compiler Shell The normal progress information consists of a banner for each compiler pass and the names of functions as they are processed The example below shows the output from compiling a single file symtab without the q option cl6x symtab c symtab c IMS320C6x ANSI C C Compiler Version xx Copyright c 1996 2000 Texas Instruments Incorporated symtab c gt symtab TIMS320C6x ANSI C C Codegen Version xx Copyright c S320C6x COFF Assembler symtab c Copyright c PASS 1 PASS 2 No 1996 2000 Texas Instruments Incorporated gt 1996 2000 7 Errors No Warnings symtab Version xx Texas Instruments Incorporated Using the C C Compiler 2 5 Changing the Compiler s Behavior With Options 2 3 Changing the Compiler s Behavior With Options 2 6 Options control the operation of both the shell and the programs it runs This section provides a description of option conventions and an option summary table It also provides detailed descriptions of the most frequently used op tions including options used for type checking and assembling The following apply to the compiler options 11 Options are not case sensitive _j Options are preceded by a hyphen Lj Single letter options without parameters can be combined For example sgq is equivalent to s g q _j Two letter pair options that have the same first le
399. tatus messages de scribing I O at a low level Use dd for more verbose informa tion Initializes all memory in the bss section data with a specified value The value is a 32 bit constant up to 8 hexadecimal dig its For example Load6x f Oxabcdabca will fill the bss section with the hexadecimal value abcdabcd Enables profiling mode Source files must be compiled with the mg profiling option for profiling to work on the stand alone simulator See section 6 3 Using the Profiling Capability of the Stand Alone Simulator g Option on page 6 6 for more information Prints the list of available options for the stand alone simulator Sets overall timeout to xxx minutes The stand alone simulator aborts if the loaded program is not finished after xxx minutes Selects the memory map The value can be 0 for memory map 0 internal program memory begins at 0x1400000 or 1 for memory map 1 Memory map 1 is used by default If the q op tion is not used the load6x banner lists the selected memory map Requests a quiet run Suppresses the banner Stand Alone Simulator Options f XXX Relocates all sections by xxx bytes during the load For more information on relocation see the linker chaper of the TMS320C6000 Assembly Language Tools User s Guide rev value Selects the silicon revision to simulate The value can be 2 for revision 2 or 3 for revision 3 Revision 2 silicon is simulated by default See section 6 4 Selecti
400. te 03 Optimization and Inlining In order to turn on automatic inlining you must use the o3 option The 03 option turns on other optimizations If you desire the o3 optimizations but not automatic inlining use oi0 with the o3 option ss aa Note Inlining and Code Size Expanding functions inline increases code size especially inlining a function that is called in a number of places Function inlining is optimal for functions that are called only from a small number of places and for small functions In order to prevent increases in code size because of inlining use the oi0 and pi options These options cause the compiler to inline intrinsics only If your code size still seems too large see section 3 4 Reducing Code Size ms Option on page 3 17 eee Optimizing Your Code 3 29 Using the Interlist Utility With the Optimizer 3 11 Using the Interlist Utility With the Optimizer 3 30 You control the output of the interlist utility when running the optimizer the on option with the os and ss options _j The os option interlists optimizer comments with assembly source state ments _j The ss and os options together interlist the optimizer comments and the original C C source with the assembly code When you use the os option with the optimizer the interlist utility does notrun as a separate pass Instead the optimizer inserts comments into the code indicating how the opt
401. te that you must specify either the c or cr option Ink6x c cr filenames o name out l libraryname Notational Conventions Related Documentation From Texas Instruments LJ The TMS320C6200 core is referred to as C6200 The TMS320C6400 core is referred to as 6400 The TMS320C6700 core is referred to as 6700 TMS320C6000 and C6000 can refer to either C6200 6400 or C6700 Related Documentation From Texas Instruments The following books describe the TMS320C6000 and related support tools To obtain any of these TI documents call the Texas Instruments Literature Response Center at 800 477 8924 When ordering identify the book by its title and literature number located on the title page TMS320C6000 Assembly Language Tools User s Guide literature number SPRU186 describes the assembly language tools assembler linker and other tools used to develop assembly language code assembler directives macros common object file format and symbolic debugging directives for the C6000 generation of devices Code Composer User s Guide literature number SPRU296 explains how to use the Code Composer development environment to build and debug embedded real time DSP applications TMS320C6000 Programmer s Guide literature number SPRU198 describes ways to optimize C and assembly code for the TMS320C6000 DSPs and includes application program examples TMS320C6000 CPU and Instruction Set Reference Guide literatur
402. ter 8 4 reserved space 8 3 stack section allocating in memory 5 11 described 8 3 __STACK_SIZE using 8 4 standalone preprocessor defined A 8 standalone simulator 6 1 to 6 12 defined A 8 invoking 6 2 options 6 4 static variable defined A 8 initializing 7 33 stdarg h header described 9 19 summary of macros 9 30 __STDC__ macro 2 25 stddef h header 9 20 stden macro 9 21 stdexcept include file 9 24 stdin macro 9 21 stdio h header described 9 20 to 9 21 summary of functions 9 30 to 9 32 stdlib h header described 9 21 summary of functions 9 33 stdout macro 9 21 storage class defined A 8 store object function 9 58 strcat function 9 89 strchr function 9 90 strcmp function 9 90 strcoll function 9 90 strcpy function 9 91 strcspn function 9 92 strength reduction optimization 3 43 Index strerror function 9 92 strftime function 9 93 strict ANSI mode 7 36 string constants 7 35 string functions 9 22 9 34 break into tokens 9 101 compare any number of characters 9 96 entire string 9 90 conversion 9 100 copy 9 97 length 9 94 matching 9 99 string error 9 92 string h header described 9 22 summary of functions 9 34 strlen function 9 94 strncat function 9 95 strncmp function 9 96 strncpy function 9 97 strpbrk function 9 98 strrchr function 9 98 strspn function 9 99 strstr function 9 99 strtod function 9 100 strtok function 9 101 strtol function 9 100 strtoul function 9 100 STRUCT_ALIGN p
403. terations in parallel done Epilog not entirely removed Collapsed epilog stages zi Prolog not removed Collapsed prolog stages 0 Minimum required memory pad 2 bytes Minimum safe trip count 222 3 6 Optimizing Software Pipelining The terms defined below appear in the software pipelining information For more information on each term see the TMS320C6000 Programmer s Guide d Loop unroll factor The number of times the loop was unrolled specifi cally to increase performance based on the resource bound constraint in a software pipelined loop Known minimun trip count The minimum number of times the loop will be executed Known maximum trip count The maximum number of times the loop will be executed Known max trip count factor Factor that would always evenly divide the loops trip count This information can be used to possibly unroll the loop Loop label The label you specified for the loop in the linear assembly input file This field is not present for C C code Loop carried dependency bound The distance of the largest loop carry path A loop carry path occurs when one iteration of a loop writes a value that must be read in a future iteration Instructions that are part of the loop carry bound are marked with the symbol Iteration interval ii The number of cycles between the initiation of successive iterations of the loop The smaller the iteration interval the fewer cycles it takes
404. text an error can be discretionary in some cases and not in others All warnings and remarks are discretionary For some messages a list of entities functions local variables source files etc is useful the entities are listed following the initial error message test c line 4 error more than one instance of overloaded function f matches the argument list function f int function f float argument types are double 253 A In some cases additional context information is provided Specifically the context information is useful when the front end issues a diagnostic while doing a template instantiation or while generating a constructor destructor or as signment operator function For example test c line 7 error A A is inaccessible B xX A detected during implicit generation of B B at line 7 Without the context information it is difficult to determine to what the error refers 2 6 1 Controlling Diagnostics Understanding Diagnostic Messages The C C compiler provides diagnostic options that allow you to modify how the parser interprets your code These options control diagnostics pdel num pden pdf pdr pds num pdse num pdsrnum pdsw num Sets the error limit to num which can be any decimal value The compiler abandons compiling after this number of errors The default is 100 Displays a diagnostic s numeric identif
405. tf Hello world n B sol _printf NOP 2 MVKL SOL SL1 0 A0 MVKH soL SL1 0 A0 lI MVKL S2 RL0 B3 STW D2 AO SP 4 It MVKH s92 RLO B3 RLO CALL OCCURS r F 6 return 0 r ZERO L1 A10 MV SEL A10 A4 LDW D2 SP 8 A10 LDW D2 SP 12 B3 OP 4 B S2 B3 OP 5 BRANCH OCCURS For more information about using the interlist utility with the optimizer see sec tion 3 11 Using the Interlist Utility With the Optimizer on page 3 30 2 44 Chapter 3 Optimizing Your Code The compiler tools can perform many optimizations that improve the execution speed and reduce the size of C and C programs by performing tasks such as simplifying loops software pipelining rearranging statements and expres sions and allocating variables into registers This chapter describes how to invoke different levels of optimization and describes which optimizations are performed at each level This chapter also describes how you can use the interlist utility when performing optimization and how you can profile or debug optimized code Topic Page Sal Invoking Optimization ares ee eea e alate a alessio tater talent ante 3 2 3 2 Optimizing Software Pipelining eeeeeeeeee eee 3 4 3 3 Red ndant Loops r m eene eae e e EE E E E EE 3 16 3 4 Reducing Code Size ms Option 0000eeeeee eee 3 17 3 5 Performing File Level Optimization o3 Option 3 18 3 6 Perfo
406. th additional information about your code The assembly optimizer directives are described in section 4 4 on page 4 16 What You Need to Know to Write Linear Assembly J Options that affect what the assembly optimizer does The following shell options affect the behavior of the assembly optimizer Option Effect Page el Changes the default extension for assembly optimizer source 2 20 files fl Changes how assembly optimizer source files are identified 2 19 k Keeps the assembly language asm file 2 16 mhn Allows speculative execution 3 13 min Specifies an interrupt threshold value 2 41 msn Controls code size on four levels msO ms1 ms2 and 3 17 ms3 mt Presumes no memory aliasing 3 27 mu Turns off software pipelining 3 5 mvn Select target version 3 15 n Compiles or assembly optimizes only does not assemble 2 17 on Increases level of optimization 00 01 02 and 03 3 2 q Suppresses progress messages 2 17 1 TMS320C6000 instructions When you are writing your linear assembly your code does not need to indicate the following m Pipeline latency m Register usage m Which unit is being used As with other code generation tools you might need to modify your linear assembly code until you are satisfied with its performance When you do this you will probably want to add more detail to your linear assembly For example you might want to specify which unit should be used a RI a aE
407. th the mdep directive Here is an example in which no_mdep is used fn CPproc ast S C Cnt no_mdep no memory aliasing in this function endproc Using the Assembly Optimizer 4 25 proc endproc Define a Procedure Syntax Description Example 4 26 label proc register registero endproc register register Use the proc endproc directive pair to delimit a section of your code that you want the assembly optimizer to optimize This section is called a procedure Use proc at the beginning of the section and endproc at the end of the section In this way you can set off sections of your assembly code that you want to be optimized like functions The directives must be used in pairs do not use proc without the corresponding endproc Specify a label with the proc direc tive You can have multiple procedures in a linear assembly file Use the optional registerparameter in the proc directive to indicate which reg isters are live in and use the optional register parameter of the endproc direc tive to indicate which registers are live out for each procedure A value is live in if it has been defined before the procedure and is used as an input to the procedure A value is ive outif it has been defined before or within the proce dure and is used as an output from the procedure If you do not specify any registers with the proc directive it is assumed that all of the registers refe
408. the best results through judicious use of the FUNC_EXT_CALLED pragma in combination with pm 03 and op1 or op2 If any of the following situations apply to your application use the suggested solution Situation Solution Situation Solution Your application consists of C C source code that calls as sembly functions Those assembly functions do not call any C C functions or modify any C C variables Compile with pm 03 op2 to tell the compiler that outside functions do not call C C functions or modify C C vari ables See section 3 6 1 for information about the op2 op tion If you compile with the pm o3 options only the compiler reverts from the default optimization level op2 to op0 The compiler uses op0 because it presumes that the calls to the assembly language functions that have a definition in C C may call other C C functions or modify C C variables Your application consists of C C source code that calls as sembly functions The assembly language functions do not call C C functions but they modify C C variables Try both of these solutions and choose the one that works best with your code E Compile with pm 03 op1 E Add the volatile keyword to those variables that may be modified by the assembly functions and compile with pm 03 op2 See section 3 6 1 on page 3 21 for information about the opn option Optimizing Your Code 3 23 Per
409. the function returns a double or long double type the value is placed in the A5 A4 register pair If the function returns a structure the caller allocates space for the struc ture and passes the address of the return space to the called function in A3 To return a structure the called function copies the structure to the memory block pointed to by the extra argument In this way the caller can be smart about telling the called function where to return the structure For example in the statement s f x where sis a structure and f is a function that returns a structure the caller can actually make the call as f amp s x The function f then copies the return structure directly into s performing the assignment automatically If the caller does not use the return structure value an address value of 0 can be passed as the first argument This directs the called function not to copy the return structure Function Structure and Calling Conventions You must be careful to declare functions properly that return structures both at the point where they are called so that the extra argument is passed and at the point where they are declared so the function knows to copy the result 7 Any register numbered A10 to A15 or B10 to B15 that was saved in step 3 is restored 8 If A15 was used as a frame pointer FP the old value of A15 is restored from the stack The space allocated for the function in step 1 is reclaimed at the end of t
410. the loads of a 2 3 and b 2 3 are scheduled in parallel This results in a 50 chance that a memory conflict will occur on every cycle However the loop kernel shown in Example 4 13 can never have a memory bank conflict In Example 4 10 if mptr directives had been used to specify that a and b point to different bases then the assembly optimizer would never find a schedule for a 1 cycle loop kernel because there would always be a memory bank con flict However it would find a schedule for a 2 cycle loop kernel Using the Assembly Optimizer 4 41 Avoiding Memory Bank Conflicts With the Assembly Optimizer 4 5 3 Memory Bank Conflicts for Indexed Pointers When determining memory bank conflicts for indexed memory accesses it is sometimes necessary to specify that a pair of memory accesses always conflict or that they never conflict This can be accomplished by using the mptr directive with a stride of 0 A stride of 0 indicates that there is a constant relation between the memory accesses regardless of the iteration delta Essentially only the base offset and width are used by the assembly optimizer to determine a memory bank conflict Recall that the stride is optional and defaults to 0 In Example 4 14 the mptr directive is used to specify which memory accesses conflict and which never conflict Example 4 14 Using mptr for Indexed Pointers mptr Sper mptr mptr LDW LDW STH STH a RS
411. the optimizer the optimizer inserts its comments and the interlist utility runs between the code generator and the assembler merging the original C C source into the assembly file Example 3 3 shows the function from Example 2 3 on page 2 44 compiled with the optimizer o2 and the ss and os options Note that the assembly file contains optimizer comments and C source interlisted with assembly code Optimizing Your Code 3 31 Using the Interlist Utility With the Optimizer Example 3 3 The Function From Example 2 3 Compiled With the o2 os and ss Options _main eek printf Hello world n fae GH return 0 STW D2 B3 SP 12 5 printf Hello world n B SoN _printf NOP 2 MVKL ed SL1 0 A0 MVKH Peeve SL1 0 A0 I MVKL S2 RL0 B3 STW D2 AO SP 4 MVKH YSZ RLO B3 RLO CALL OCCURS r 3 6 return 0 r ZERO sI A4 LDW D2 4 SP 12 B3 NOP 4 B S2 B3 NOP 5 BRANCH OCCURS 3 32 Debugging and Profiling Optimized Code 3 12 Debugging and Profiling Optimized Code Debugging fully optimized code is not recommended because the optimizer s extensive rearrangement of code and the many to many allocation of vari ables to registers often make it difficult to correlate source code with object code Profiling code that has been built with the g option full debug is also not recommended because the g option causes significant p
412. the tangent of x Returns the tangent of x Returns the hyperbolic tangent of x Returns the hyperbolic tangent of x Returns x truncated toward 0 t Returns x truncated toward 0 t T Enhanced math function See section 9 3 8 on page 9 18 for information on accessing this function Run Time Support Functions Page 9 77 9 77 9 78 9 78 9 78 9 78 9 83 9 83 9 84 9 84 9 87 9 87 9 87 9 87 9 88 9 88 9 102 9 102 9 102 9 102 9 105 9 105 9 29 Summary of Run Time Support Functions and Macros d Nonlocal jumps macro and function setimp h csetjmp Function or Macro int setimp jmp_buf env void longjmp jmp_buf env int _ val e Variable argument macros stdarg h cstdarg Macro type va_arg va_list type void va_end va_list void va_start va_list parmN f C VO functions stdio h cstdio Function int add_device char name unsigned flags int dopen int dclose int dread int dwrite fpos_t dlseek int dunlink int drename void clearerr FILE _fp int fclose FILE _fp int feof FILE _fp int ferror FILE _fp int fflush register FILE _fp int fgetc register FILE _fp int fgetpos FILE _fp foos_t pos char fgets char _ptr register int _ size register FILE _fp 9 30 Description Saves calling environment for use by longjmp this is a macro Uses jmp_buf argument to restore a previously saved environment Descripti
413. tic restrictions of normal C C statements Each can appear as a statement or a declaration even outside of blocks This is useful for inserting directives at the very beginning of a com piled module a a a a a aT Note Avoid Disrupting the C C Environment With asm Statements Be careful not to disrupt the C C environment with asm statements The compiler does not check the inserted instructions Inserting jumps and labels into C C code can cause unpredictable results in variables manipulated in or around the inserted code Directives that change sections or otherwise affect the assembly environment can also be troublesome Be especially careful when you use optimization with asm statements Although the optimizer cannot remove asm statements it can significantly rearrange the code order near them and cause undesired results ee TMS320C6000 C C Language Implementation 7 17 Pragma Directives 7 7 Pragma Directives 7 18 Pragma directives tell the compiler how to treat a certain function object or section of code The C6000 C C compiler supports the following pragmas CODE_SECTION DATA_ALIGN DATA_MEM_BANK DATA_SECTION FUNC_CANNOT_INLINE FUNC_EXT_CALLED FUNC_INTERRUPT_THRESHOLD FUNC_IS_PURE FUNC_IS_SYSTEM FUNC_NEVER_RETURNS FUNC_NO_GLOBAL_ASG FUNC_NO_IND_ASG INTERRUPT MUST_ITERATE NMI_INTERRUPT PROB_ITERATE STRUCT_ALIGN UNROLL O O O O O O O O O O O O O O O O O Most of these pragmas apply to f
414. time_t or a struct tm can be expressed from different points of reference _j Calendar time represents the current Gregorian date and time _j Local time is the calendar time expressed for a specific time zone The time functions and macros are listed in Table 9 3 i on page 9 36 You can adjust local time for local or seasonal variations Obviously local time depends on the time zone The time h ctime header defines a structure type called tmzone and a variable of this type called _tz You can change the time zone by modifying this structure either at run time or by editing tmzone c and changing the initialization The default time zone is CST Central Standard Time U S A The basis for all the time h ctime functions are the system functions of clock and time Time provides the current time in time_t format and clock provides the system time in arbitrary units You can divide the value returned by clock by the macro CLOCKS_PER_SEC to convert it to seconds Since these func tions and the CLOCKS_PER_SEC macro are system specific only stubs are provided in the library To use the other time functions you must supply custom versions of these functions Gon co to tet a oe ee ee a Note Writing Your Own Clock Function The clock function works with the stand alone simulator load6x Used in the load6x environment clock returns a cycle accurate count The clock func tion returns 1 when used with the HLL debugger A host
415. ting Whether Certain Aliasing Techniques Are Used 3 7 2 Use the mt Option to Indicate That These Techniques Are Not Used 3 26 The mt option informs the compiler that it can make certain assumptions about how aliases are used in your code These assumptions allow the com piler to improve optimization The mt option also specifies that loop invariant counter increments and decrements are non zero Loop invariant means the value of an expression does not change within the loop J The mt option indicates that your code does not use the aliasing tech nique described in section 3 7 1 If your code uses that technique do not use the mt option however you must compile with the ma option Do not use the ma option with the mt option If you do the mt option overrides the ma option J The mt option indicates that a pointer to a character type does not alias point to an object of another type That is the special exception to the general aliasing rule for these types given in section 3 3 of the ANSI speci fication is ignored If you have code similar to the following example do not use the mt option long l char p char amp l pl2 5 J The mt option indicates that indirect references on two pointers P and Q are not aliases if P and Q are distinct parameters of the same function activated by the same call at run time If you have code similar to the following example do not use th
416. tion on page 8 5 Align Heap include lt stdlib h gt void memalign size_t alignment size_t _ size include lt stdlib h gt void std memalign size_t alignment size_t _ size memory c in rts src The memalign function performs like the ANSI standard malloc function except that it returns a pointer to a block of memory that is aligned to an alignment byte boundary Thus if _size is 128 and alignment is 16 memalign returns apointer to a 128 byte block of memory aligned on a 16 byte boundary Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C Defined in Description memcmp Find First Occurrence of Byte include lt string h gt void memchr const void cs int c size_t n include lt cstring gt void std memchr const void cs int c size_t n memchr c in rts src The memchr function finds the first occurrence of c in the first n characters of the object that cs points to If the character is found memchr returns a pointer to the located character otherwise it returns a null pointer 0 The memchr function is similar to strchr except that the object that memchr searches can contain values of 0 and c can be 0 Memory Compare include lt string h gt int memcmp const void cs const void ct size_t n include lt cstring gt int std memcmp const void cs const void ct size_t n memcmp c in rts src The memcmp function compares the first n c
417. tion the frame is allocated by subtracting a constant from register B15 SP Register B15 SP is not decremented anywhere else within this function If the called function calls any other functions the return address must be saved on the stack Otherwise it is left in the return register B3 and is overwritten by the next function call If the called function modifies any registers numbered A10 to A15 or B10 to B15 it must save them either in other registers or on the stack The called function can modify any other registers without saving them If the called function expects a structure argument it receives a pointer to the structure instead If writes are made to the structure from within the called function space for a local copy of the structure must be allocated on the stack and the local structure must be copied from the passed pointer to the structure If no writes are made to the structure it can be referenced in the called function indirectly through the pointer argument You must be careful to declare functions properly that accept structure arguments both at the point where they are called so that the structure argument is passed as an address and at the point where they are de clared so the function knows to copy the structure to a local copy The called function executes the code for the function If the called function returns any integer pointer or float type the return value is placed in the A4 register If
418. tion 9 55 program level optimization controlling 3 21 defined A 7 performing 3 20 progress information suppressing 2 17 prolog defined A 7 prolog collapsing 3 13 speculative execution 3 13 ps shell option 7 36 pseudorandom integer generation functions 9 81 ptrdiff_t 7 3 ptrdiff_t datatype 9 20 push defined A 7 putc function 9 79 putchar function 9 79 puts function 9 80 px shell option 2 33 q library build utility option 10 4 q option linker 5 7 shell 2 17 standalone simulator 6 4 qq shell option 2 17 qsort function 9 80 r option linker 5 7 standalone simulator 6 5 raise to a power functions 9 78 rand function 9 81 RAND_MAX macro 9 21 random integer functions 9 81 raw listing file generating with pl option 2 34 identifiers 2 34 read character functions multiple characters 9 59 next character function 9 65 9 66 single character 9 58 stream functions from standard input 9 84 from string to array 9 62 string 9 64 9 88 read function 9 66 read I O function 9 9 realloc function 8 5 9 75 change heap size 9 81 reversing 9 62 reciprocal square root functions 9 84 reducing code size 3 17 redundant loops defined A 7 described 3 16 reg directive 4 28 register storage class 7 4 Index register variables compiling 7 16 conventions 8 16 optimizations 3 44 to 3 46 registers accessing control registers from C C 7 8 allocation 8 16 conventions 8 16 to 8 17 live in 4 26 live out 4 26 savin
419. tion transfers the result to A6 Here is a complete call example global _main global _puts rand ltoa sect Const stringl string The random value returned is 0 string2 string 10 O 10 newline bss charbuf 20 text _main 2 CPLOe reg random_value bufptr ran_val_hi ran_val_lo call random_value _rand get a random value MVKL stringl bufptr load address of stringl MVKH stringl bufptr call _puts bufptr z print out Stringi MV random_value ran_val_lo SHR ran_val_lo 31 ran_val_hi Sign extend random value call _ltoa ran_val_hi ran_val_lo bufptr convert it to a string call _puts bufptr print out the random value MVKL string2 bufptr load address of string2 MVKH string2 bufptr calil _puts bufptr print out a newline endproc 4 18 Syntax Description Define a C Callable Procedure cproc endproc label cproc variable variables endproc Use the cproc endproc directive pair to delimit a section of your code that you want the assembly optimizer to optimize and treat as a C C callable function This section is called a procedure The cproc directive is similar to the proc directive in that you use cproc at the beginning of a section and endproc at the end of a section In this way you can set off sections of your assembly code that you want to be optimized like functions The directives must be used in pairs do not u
420. tions by using the interrupt pragma or the interrupt keyword For more information see section 7 7 13 The INTERRUPT Pragma on page 7 27 and section 7 4 3 The interrupt Key word on page 7 10 You are responsible for handling the AMR control register and the SAT bit in the CSR correctly inside an interrupt By default the compiler does not do any thing extra to save restore the AMR and the SAT bit Macros for handling the SAT bit and the AMR register are included in the c6x h header file Run Time Environment 8 41 Interrupt Handling For example you are using circular addressing in some hand assembly code that is the AMR does not equal 0 This hand assembly code can be inter rupted into a C code interrupt service routine The C code interrupt service rou tine assumes that the AMR is set to 0 You need to define a local unsigned int temporary variable and call the SAVE_AMR and RESTORE_AMR macros at the beginning and end of your C interrupt service routine to correctly save restore the AMR inside the C interrupt service routine Example 8 5 AMR and SAT Handling include lt c6x h gt interrupt void interrupt_func unsigned int temp_amr define other local variables used inside interrupt save the AMR to a temp location and set it to 0 SAVE_AMR temp_amr code and function calls for interrupt service routine restore the AMR for you hand assembly code before exiting if RESTORE_AMR temp_amr
421. tions in parallel gt minimum or maximum trip count A software pipeline schedule was found but the schedule has more iterations in parallel than the minimum or maximum loop trip count You must enable redundant loops or communicate the trip information Lj Speculative threshold exceeded It would be necessary to speculatively load beyond the threshold currently specified by the mh option You must increase the mh threshold as recommended in the software pipeline feedback located in the assembly file Optimizing Software Pipelining Register is live too long A register must have a value that exists is live for more than ii cycles You may insert MV instructions to split register life times that are too long If the assembly optimizer is being used the sa file line numbers of the in structions that define and use the registers that are live too long are listed after this failure message ii 9 Register is live too long 10 gt 17 This means that the instruction that defines the register value is on line 10 and the instruction that uses the register value is on line 17 in the sa file Too many predicates live on one side The C6000 has predicate or conditional registers available for use with conditional instructions There are 5 predicate registers on the C6200 and C6700 and 6 predicate regis ters on the C6400 There are two or three on the A side and three on the B side Sometimes the particular partition
422. to the threshold value given by the mi option See section 2 11 Interrupt Flexibil ity Options mi Option on page 2 41 for more information Example 1 Specify Trio Count Values trip If the assembly optimizer cannot ensure that the trip count is large enough to pipeline a loop for maximum performance a pipelined version and an unpipe lined version of the same loop are generated This makes one of the loops a redundant loop The pipelined or the unpipelined loop is executed based on a comparison between the trip count and the number of iterations of the loop that can execute in parallel If the trip count is greater or equal to the number of parallel iterations the pipelined loop is executed otherwise the unpipelined loop is executed For more information about redundant loops see section 3 3 on page 3 16 The trip directive states that the loop will execute 16 24 32 40 or 48 times when the w_vecsum routine is called w_vecsum cproc ptr_a ptr_b ptre weight cnt reg ai bi prod scaled_prod ci no_mdep loop strip 16 48 8 ldh ptr_att ai ldh ptr_bt bi mpy weight ai prod shr prod 15 scaled_prod add scaled_prod bi ci sth Cl tpr ctt cnt sub ent Ly ent ent b loop endproc Using the Assembly Optimizer 4 33 Avoiding Memory Bank Conflicts With the Assembly Optimizer 4 5 Avoiding Memory Bank Conflicts With the Assembly Optimizer The internal memory of the C6000 family varie
423. to store any 64 bit values in C C code The _lo and _hi intrinsics are useful for extracting the two 32 bit portions from a 64 bit double Example 8 2 shows the usage of the _lo hi and _memd8 intrinsics Example 8 amp 2 Using the _lo and _hi Intrinsics void load_longlong_unaligned void a int high int low double d _memd8 a high _hi d low _lo d void store_longlong_unaligned void a int high int low double d _itod high low _memd8 a d 8 5 4 Using MUST_ITERATE and _nassert to Enable SIMD and Expand Compiler Knowledge of Loops Through the use of MUST_TERATE and _nassert you can guarantee that a loop executes a certain number of times This example tells the compiler that the loop is guaranteed to run exactly 10 times pragma MUST_ITERATE 10 10 for i 0 i lt trip_count itt MUST_ITERATE can also be used to specify a range for the trip count as well as a factor of the trip count For example pragma MUST_ITERATE 8 48 8 for i 0 i lt trip i This example tells the compiler that the loop executes between 8 and 48 times and that the trip variable is a multiple of 8 8 16 24 32 40 48 The compiler can now use all this information to generate the best loop possible by unrolling better even when the min option is used to specify that interrupts do occur every ncycles Run Time Environment 8 35 Interfac
424. tocols cannot be bypassed Here is an example of a direct branch outside of a proc region proc B outside lt illegal endproc outside Using the Assembly Optimizer 4 27 feg Declare Variables Syntax Description Example 1 Example 2 4 28 reg variable variableo The reg directive allows you to use descriptive names for values that are stored in registers The assembly optimizer chooses a register for you such that its use agrees with the functional units chosen for the instructions that op erate on the value The reg directive is valid within procedures only that is within occurrences of the proc and endproc directive pair or the cproc and endproc directive pair Objects of type long double orlong double are allocated into an even odd reg ister pair and are always referenced as a register pair for example A1 A0 Asymbolic register that is used as a register in a register pair must be defined as a register pair with the reg directive For example reg ahi alo ADD a0 ahi alo ahi alo This example uses the same code as the block move example on page 4 26 but the reg directive is used move seproce dst sre Cnt reg tmpl tmp2 loop LDW srct tmpl MV tmpl tmp2 STW tmp2 dstt ADD 4 cnt ent cnt B loop endproc Notice how this example differs from the proc example on page 4 26 symbolic registers declared with reg are allocated as machine register
425. total number of instructions that can use either the L or S unit m Addition ops LSD is the total number of instructions that can use either the L or S or D unit Bound L S LS is the resource bound value as determined by the number of instructions that use the L and S units It is calculated with the following formula Bound L S LS ceil L S LS 2 Bound L S D LS LSD is the resource bound value as determined by the number of instructions that use the D L and S unit It is calculated with the following formula Bound L S D LS LSD ceil L S D LS LSD 3 Minimum required memory pad The number of bytes that are read if speculative execution is enabled See section 3 2 3 Collapsing Prologs and Epilogs for Improved Performance and Code Size on page 3 13 for more information Optimizing Software Pipelining 3 2 2 1 Loop Disqualified for Software Pipelining Messages The following messages appear if the loop is completely disqualified for soft ware pipelining Lj Bad loop structure This error is very rare and can stem from the follow ing m An asm statement inserted in the C code innerloop m Parallel instructions being used as input to the Linear Assembly Opti mizer m Complex control flow such as GOTO statements and breaks Loop contains a call Sometimes the compiler may not be able to inline a function call that is in a loop Because the compiler could not
426. tride For example mptr a_0O at 0 16 mptr a_4 a 4 16 LDW a_0 4 vall base a offset 0 stride 16 LDW a_4 4 val2 base a offset 4 stride 16 mptr dptr D 0 8 LDH dptr do base D offset 0 stride 8 LDH dptr dl base D offset 2 stride 8 LDH dptr d2 base D offset 4 stride 8 LDH dptr d3 base D offset 6 stride 8 In this example the offset for dptr is updated after every memory access The offset is updated only when the pointer is modified by a constant This occurs for the pre post increment decrement addressing modes See page 4 23 for information about the mptr directive 4 36 Avoiding Memory Bank Conflicts With the Assembly Optimizer Example 4 8 shows loads and stores extracted from a loop that is being soft ware pipelined Example 4 8 Load and Store Instructions That Specify Memory Bank Information mptr Ain IN 16 mptr Bin IN 4 16 mptr Aco COEF 16 mptr Bco COEF 4 16 mptr Aout optr 0 4 mptr Bout optr 2 4 LDW lt DA Ain 2 Ain12 IN k i amp IN k i 1 LDW D2 Bin 2 Bin23 IN k i 2 amp IN k i 1 LDW D1 Ain 2 Ain34 IN k i 4 amp IN k i 3 LDW D2 Bin 2 Bin56 IN k i 6 amp IN k i 5 LDW D2 Bcot 2 Bcol2 COEF i amp COEF i 1 LDW SDE Acot 2 Aco23 COEF it 2 amp COEF it 3 LDW D2 Bcot 2 Bin34 COEF i 4 amp COEF i 5 LDW D1 Acot 2 Ain56 COE
427. tring pointed to by _mode describes how to open the file Fraction and Exponent include lt math h gt double frexp double value int exp float frexpf float value int exp include lt cmath gt double std frexp double value int exp float std frexpf float value int exp frexp c and frexpf c in rts src The frexp and frexpf functions break a floating point number into a normalized fraction f and the integer power of 2 These functions return f and exp such that 0 5 lt f lt 1 0 and value ff x 2 XP The power is stored in the int pointed to by exp If value is 0 both parts of the result are 0 double fraction int exp fraction frexp 3 0 amp exp after execution fraction is 75 and exp is 2 Run Time Support Functions 9 63 fscanf Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C Defined in Description Syntax for C Defined in Description 9 64 Read Stream include lt stdio h gt int fscanf FILE _fp const char _fmt include lt cstdio gt int std fscanf FILE _fp const char _ fmt fscanf c in rts src The fscanf function reads from the stream pointed to by _ fp The string pointed to by _fmt describes how to read the stream Set File Position Indicator include lt stdio h gt int fseek register FILE _fp long _ offset int _ptrname include lt cstdio gt int std fseek register FILE _f
428. trtok stra ptr gt excuse 0 ptr strtok 0 ptr gt me 0 aA ptr strtok 0 ptr gt while O Convert Characters include lt string h gt size_t strxfrm register char to register const char from register size_t n include lt cstring gt size_t std strxfrm register char to register const char from register size_t n strxfrm c in rts src The strxfrm function converts n characters pointed to by from into the n characters pointed to by to Run Time Support Functions 9 101 tan tanf tan tanf Syntax for C Syntax for C Defined in Description Example tanh tanhf Syntax for C Syntax for C Defined in Description Example 9 102 Tangent include lt math h gt double tan double x float tanf float x include lt cmath gt double std tan double x float std tanf float x tan c and tanf c in rts src The tan and tanf functions return the tangent of a floating point number x The angle x is expressed in radians An argument with a large magnitude can produce a result with little or no significance double x y x 3 1415927 4 0 y tan x y approx 1 0 Hyperbolic Tangent include lt math h gt double tanh double x float tanhf float x include lt cmath gt double std tanh double x float std tanhf float x tanh c and tanhf c in rts src The tanh and tanhf functions r
429. tter can be combined For example pk pl and pm can be combined as pklm Li Options that have parameters such as uname and idirectory cannot be combined They must be specified separately _j An option with a required parameter can be specified with or without a space before the parameter For example the option to undefine a name can be expressed as u name or uname However a required numeric parameter must be placed immediately after the option no space between the option and parameter Lj Anoption with an optional parameter must be specified with the parameter immediately after the option That is no space is between the option and parameter For example the option to specify the maximum amount of optimization must be expressed as 03 not o 3 J Files and options except the z option can occur in any order The z op tion must follow all other compiler options and precede any linker options You can define default options for the shell by using the C_OPTION or C6X_C_OPTION environment variable For a detailed description of these environment variables see section 2 4 Setting Default Shell Options C_OPTION and C6X_C_OPTION on page 2 23 Table 2 1 summarizes all options including linker options Use the page references in the table for more complete descriptions of the options For an online summary of the options enter cl6x with no parameters on the command line Table 2 1 Shell Opti
430. tween the UNROLL pragma and the loop The syntax of the pragma is for both C and C pragma UNROLL n If possible the compiler unrolls the loop so there are n copies of the original loop The compiler only unrolls if it can determine that unrolling by a factor of nis safe In order to increase the chances the loop is unrolled the compiler needs to know certain properties _j The loop iterates a multiple of n times This information can be specified to the compiler via the multiple argument in the MUST_ITERATE pragma _j The smallest possible number of iterations of the loop _j The largest possible number of iterations of the loop The compiler can sometimes obtain this information itself by analyzing the code However sometimes the compiler can be overly conservative in its assumptions and therefore generates more code than is necessary when unrolling This can also lead to not unrolling at all Furthermore if the mechanism that determines when the loop should exit is complex the compiler may not be able to determine these properties of the loop In these cases you must tell the compiler the properties of the loop by using the MUST_ITERATE pragma Specifying pragma UNROLL 1 asks that the loop not be unrolled Automatic loop unrolling also is not performed in this case If multiple UNROLL pragmas are specified for the same loop it is undefined which unroll pragma is used if any TMS320C6000 C C Lan
431. uble _absd double double _negd double float _absf float float _negf float Double absolute value Double negative value Float absolute value Float negative value double _addd double double double _cmpd double double double _divd double double double _mpyd double double double _subd double double Double addition Double comparison Double division Double multiplication Double subtraction float _addf float float Float addition float _cmpf float float Float comparison float _divf float float Float division float _mpyf float float Float multiplication float _ subf float float Float subtraction int _ divi int int Signed integer division int _remi int int Signed integer remainder uint _divu uint uint Unsigned integer division uint _remu uint uint Unsigned integer remainder long _divli long long Signed long division long _remli long long Signed long remainder ulong _divul ulong ulong Unsigned long division ulong _remul ulong ulong Unsigned long remainder System Initialization 8 8 System Initialization Before you can run a C C program you must create the C C run time en vironment The C C boot routine performs this task using a function called c_int00 The run time support source libraries rts src and rtscpp src contain the source to this routine in a module named boot asm To begin running the system the c_int00 function can be branched to
432. ument list is given by _ap Write to Standard Output include lt stdlib h gt int vprintf const char _ format va_list _ap include lt cstdlib gt int std vprintf const char _ format va_list _ap vprintf c in rts src The vprintf function writes to the standard output device The string pointed to by _format describes how to write the stream The argument list is given by _ap Run Time Support Functions 9 107 vsprintf Syntax for C Syntax for C Defined in Description 9 108 Write Stream include lt stdlib h gt int vsprintf char _ string const char _format va_list _ ap include lt cstdlib gt int std vsprintf char _ string const char _ format va_list _ap vsprintf c in rts src The vsprintf function writes to the array pointed to by_ string The string pointed to by _format describes how to write the stream The argument list is given by _ap Chapter 10 Library Build Utility When using the C C compiler you can compile your code under a number of different configurations and options that are not necessarily compatible with one another Since it would be cumbersome to include all possible combina tions in individual run time support libraries this package includes the source archive rts src which contains all run time support functions You can build your own run time support libraries by using the mk6x utility described in this chapter and the archiver described in the
433. uml 0 sum i for i 0 i lt 100 2 it 2 sum0 a i b il suml afi 1 b i 1 return sum0 suml Avoiding Memory Bank Conflicts With the Assembly Optimizer Example 4 10 Linear Assembly for Dot Product _dotp cproc a b reg sum0 suml i reg vall val2 prodl prod2 MVK 50 i i 100 2 ZERO sum0 multiply result 0 ZERO suml multiply result 0 loop trip 50 LDW xa vall load a 0 1 bank0O LDW bo val2 load b 0 1 bank2 MPY vall val2 prodl a 0O b 0 MPYH vall val2 prod2 a i pH ADD prodl sum0 sum0 sum0 a b 0 ADD prod2 suml suml suml a l b 1 i ADD 1 i 1 z i Lil B loop if 1 goto loop ADD sum0 sum1 A4 compute final result return A4 endproc Example 4 11 Dot Product Software Pipelined Kernel L3 PIPE LOOP KERNEL ADD L2 B4 B6 B6 sum0 a 0 b 0 ADD L1 A5 A0 A0 suml a l b 1 MPY M2X A3 B5 B4 7 a 0 b 0 MPYH M1X A3 B5 A5 7 a l b 1 BO B Sle B3 7 if i goto loop BO ADD S2 1 B0 B0 CRCC i LDW D1 A4 A3 7 load a 0 1 bankO LDW D2 B4 B5 7 load b 0 1 bank2 It is not always possible to control fully how arrays and other memory objects are aligned This is especially true when a pointer is passed into a function and that pointer may have different alignments each time the function is cal
434. unctions The macro is named RAND_MAX and it returns the largest value returned by the rand function The types are J div_t a structure type that is the type of the value returned by the div function Idiv_t a structure type that is the type of the value returned by the Idiv function The functions are m m m m String conversion functions that convert strings to numeric representations Searching and sorting functions that search and sort arrays Sequence generation functions that generate a pseudo random sequence and choose a starting point for a sequence Program exit functions that terminate your program normally or abnormally Integer arithmetic thatis not provided as a standard part of the C language The general utility functions are listed in Table 9 3 g on page 9 33 Run Time Support Functions 9 21 Header Files 9 3 14 String Functions string h cstring The string h cstring header declares standard functions that perform the following tasks with character arrays strings J Move or copy entire strings or portions of strings Lj Concatenate strings Lj Compare strings Search strings for characters or other strings _j Find the length of a string In C all character strings are terminated with a O null character The string functions named strxxx all operate according to this convention Additional functions that are also declared in string h cstring perform corresponding op
435. unctions Except for the DATA_MEM_BANK pragma the arguments func and symbol cannot be defined or declared inside the body of a function Pragmas that apply to functions must be specified out side the body of a function and it must occur before any declaration definition or reference to the func or symbol argument If you do not do this the compiler issues a warning For the pragmas that apply to functions or symbols the syntax for the pragmas differs between C and C In C you must supply the name of the object or function to which you are applying the pragma as the first argument In C the name is omitted the pragma applies to the declaration of the object or func tion that follows it Pragma Directives 7 7 1 The CODE_SECTION Pragma The CODE_SECTION pragma allocates space for the symbol in a section named section name The syntax of the pragma in C is pragma CODE_SECTION symbol section name The syntax of the pragma in C is pragma CODE_SECTION section name The CODE_SECTION pragma is useful if you have code objects that you want to link into an area separate from the text section Example 7 4 demonstrates the use of the CODE_SECTION pragma Example 7 4 Using the CODE_SECTION Pragma a C source file pragma CODE_SECTION fn my_sect int fn int x return c b Assembly source file file CODEN c sect my
436. using the stack 8 4 general utility 9 21 9 33 inline expansion 2 36 to 2 40 inlining defined A 4 prototype effects of sok option 7 34 responsibilities of called function 8 19 responsibilities of calling function 8 18 structure 8 18 fwrite function 9 65 g option linker 5 6 shell 2 15 general purpose registers 32 bit data 8 9 8 10 8 11 double precision floating point data 8 12 halfword 8 9 generating linknames 7 32 generating list of include files 2 28 get file position function 9 65 getc function 9 65 getchar function 9 66 getenv function 9 66 gets function 9 66 global symbol defined A 4 Index 8 global variables accessing assembler variables from C 8 39 autoinitialization 8 46 initializing 7 33 reserved space 8 3 gmtime function 9 67 gp shell option 3 34 Greenwich mean time function 9 67 Gregorian time 9 22 gsm h header 9 15 gw shell option 2 16 h library build utility option 10 4 11 2 h option linker 5 6 standalone simulator 6 4 header files assert h header 9 14 cassert header 9 14 cctype header 9 14 cerrno header 9 15 cfloat header 9 16 to 9 17 climits header 9 16 to 9 17 cmath header 9 18 csetjmp header 9 19 cstdarg header 9 19 cstdio header 9 20 to 9 21 cstdlib header 9 21 cstring header 9 22 ctime header 9 22 to 9 23 ctype h header 9 14 errno h header 9 15 file h header 9 15 float h header 9 16 to 9 17 gsm h header 9 15 limits h header 9 16 to 9 17 linkage h header
437. utine or by any function called by the routine When you use the interrupt keyword with the definition of the function the compiler generates register saves based on the rules for interrupt functions and the special return sequence for inter rupts You can only use the interrupt keyword with a function that is defined to return void and that has no parameters The body of the interrupt function can have local variables and is free to use the stack or global variables For example interrupt void int_handler unsigned int flags The name c_int00 is the C C entry point This name is reserved for the sys tem reset interrupt This special interrupt routine initializes the system and calls the function main Because it has no caller c_int00 does not save any registers Use the alternate keyword __ interrupt if you are writing code for strict ANSI mode using the ps shell option Keywords 7 4 4 The near and far Keywords The C6000 C C compiler extends the C C language with the near and far keywords to specify how global and static variables are accessed and how functions are called Syntactically the near and far keywords are treated as storage class modifiers They can appear before after or in between the storage class specifiers and types With the exception of near and far two storage class modifiers cannot be used together in a single declaration The following examples are legal combinations of near and f
438. vice char name unsigned flags int dopen int dclose int dread int dwrite fpos_t dlseek int dunlink int drename include lt cstdio gt int std add_device char name unsigned flags int dopen int dclose int dread int dwrite fpos_t dlseek int dunlink int drename Defined in Description Return Value add_device lowlev c in rts src The add_device function adds a device record to the device table allowing that device to be used for input output from C The first entry in the device table is predefined to be the host device on which the debugger is running The func tion add_device finds the first empty position in the device table and initializes the fields of the structure that represent a device To open a stream on a newly added device use fopen with a string of the for mat devicename filename as the first argument _j The name is a character string denoting the device name _ The flags are device characteristics The flags are as follows _SSA_ Denotes that the device supports only one open stream at a time _MSA Denotes that the device supports multiple open streams More flags can be added by defining them in stdio h LJ The dopen dclose dread dwrite dlseek dunlink drename specifiers are function pointers to the device drivers that are called by the low level func tions to perform I O on the specified
439. vice table Host open read p eoo open read p eee Syntax for C Syntax for C Description Return Value Syntax for C Syntax for C Description Iseek Close File or Device For I O include lt stdio h gt include lt file h gt int close int file_descripton include lt cstdio gt include lt file h gt int std close int file_descripton The close function closes the device or file associated with file_descriptor The file_descriptor is the stream number assigned by the low level routines that is associated with the opened device or file The return value is one of the following 0 if successful 1 if not successful Set File Position Indicator include lt stdio h gt include lt file h gt long Iseek int file_descriptor long offset int origin include lt cstdio gt include lt file h gt long std lseek int file_descriptor long offset int origin The Iseek function sets the file position indicator for the given file to origin offset The file position indicator measures the position in characters from the beginning of the file I The file_descriptor is the stream number assigned by the low level rou tines that the device level driver must associate with the opened file or device _j The offset indicates the relative offset from the origin in characters _j The originis used to indicate which of the base locations the offset is mea sured from
440. xists when inlining is disabled Since this is not an inline function the _INLINE preprocessor symbol is undefined undef before string h is included to gen erate a noninline version of strlen s prototype Using Inline Function Expansion Example 2 2 How the Run Time Support Library Uses the _INLINE Preprocessor Symbol a string h RK HK IK IK I I I I I I I I I I I I I I HO string h vx xx Af Copyright c 1993 1999 Texas Instruments Incorporated amp Excerpted E RK HK IK IK I I I I I I I I I I I I I I I I I I I I I ifdef _INLINE define _IDECL static inline else define _IDECL extern _CODE_ ACCESS endif _IDECL size_t strlen const char _string ifdef _INLINE RK HK IK IK I I I I I I I I I I I I I I I I HO He strlen RK kk IK IK I IK I I I I I I I I I I I I I static inline size_t strlen const char string size_t n size_t 1 const char s string 1 do n while s return n endif b strlen c KK KK A A A A A A A A A A A A A A A A A A A A A A A A A A A TA a A OO Oe strlen KK KK A A A A A A A A A A A A A A A A A A A A A A A A A A a a a oe undef _INLINE include lt string h gt _CODE_ACCESS size_t strlen cont char string size_t n size_t 1 const char s string 1 do n while s return n Using the C C Compiler 2 39
441. you can also specify the family of the part for example mv6400 or mv6700 If this option is not used the compiler generates code for the C6200 parts If the mv option is not specified the code generated will run on all C6000 parts however the compiler does not take advantage of target specific instructions or alignment Optimizing Your Code 3 15 Redundant Loops 3 3 Redundant Loops Every loop iterates some number of times before the loop terminates The number of iterations is called the trip count The variable used to count each iteration is the trip counter When the trip counter reaches a limit equal to the trip count the loop terminates The C6000 tools use the trip count to determine whether or not a loop can be pipelined The structure of a software pipelined loop requires the execution of a minimum number of loop iterations a mini mum trip count in order to fill or prime the pipeline The minimum trip count for a software pipelined loop is determined by the num ber of iterations executing in parallel In Figure 3 2 on page 3 4 the minimum trip count is five In the following example A B and C are instructions in a soft ware pipeline so the minimum trip count for this single cycle software pipe lined loop is three A B C lt Three iterations in parallel minimum trip count oub A B C When the C6000 tools cannot determine the trip count for a loop then by de fault two loops and control logic are
442. you must note a dependence relation ship from st1 to Id1 mdep stl ldl Both directives together force the software pipeline shown in Example 4 17 Example 4 17 Software Pipeline Using mdep st1 Id1 and mdep d1 st1 iteration n iteration n l LDW ldi STW stl LDW ldl STW stl Indexed addressing base index is a good example of an addressing mode where you typically do not know anything about the relative sequence of the memory accesses except they sometimes access the same location To cor rectly model this case you need to note the dependence relation in both direc tions and you need to use both directives mdep ldi stl mdep stl ldl 4 46 Memory Alias Disambiguation 4 6 5 Memory Alias Examples Following are memory alias examples that use the mdep and no_mdep direc tives I Example 1 The mdepr1 r2 directive declares that LDW must be before STW In this case src and dst might point to the same array En cproc dst src cnt reg tmp no_mdep mdep EE E2 LDW src rl tmp STW cnt ds tE return tmp endproc J Example 2 Here mdep r2 r1 indicates that STW must occur before LDW Since STW is after LDW in the code the dependence relation is across loop iterations The STW in struction writes a value that may be read by the LDW instruction on the next itera tion In this case a 6 cycle recurrence is created fn cproc dst src cnt r
443. ype for example L1 What You Need to Know to Write Linear Assembly If you do not specify the functional unit the assembly optimizer selects the functional unit based on the mnemonic field For more information on functional units including which machine instruction mnemonics require which functional type see the TMS320C6000 CPU and Instruction Set Reference Guide The following examples show how specifying functional units can be helpful in the linear assembly code Example 4 1 is refined C code for computing a dot product Example 4 1 C Code for Computing a Dot Product int dotp short a short b int sum0 int suml int sum i for i 0 i lt 100 4 i 4 sum0 a i E DELI sum0 a i 1 b i 1 suml a i 2 b i 2 suml a i 3 b i 3 return sum0 suml Using the Assembly Optimizer 4 9 What You Need to Know to Write Linear Assembly Example 4 2 is a hand coded linear assembly program that computes a dot product compare this to Example 4 1 which illustrates C code Example 4 2 Linear Assembly Code for Computing a Dot Product _dotp loop ent Eent cproc reg reg reg ADD ADD MVK N ERO ERO N serp Zo DW PY PYH DD DD Pre SE DW DW PY PYH DD DD E Pre SE w ADD return endproc a_0 b0 a_4 b_4 cnt tmp prodl prod2 prod3 prod4 valA valB su
444. ze memory c in rts src The calloc function allocates size bytes size is an unsigned integer or size_t for each of num objects and returns a pointer to the space The function initial izes the allocated memory to all Os If it cannot allocate the memory that is if it runs out of memory it returns a null pointer 0 The memory that calloc uses is ina special memory pool or heap The constant ___SYSMEM_SIZE defines the size of the heap as 2K bytes You can change this amount at link time by invoking the linker with the heap option and specifying the desired size of the heap in bytes directly after the option See section 8 1 3 Dynamic Memory Allocation on page 8 5 This example uses the calloc routine to allocate and clear 20 bytes prt calloc 10 2 Allocate and clear 20 bytes Ceiling include lt math h gt double ceil double x float ceilf float x include lt cmath gt double std ceil double x float std ceilf float x ceil c and ceilf c in rts src The ceil and ceilf functions return a floating point number that represents the smallest integer greater than or equal to x extern float ceil float answer ceilf 3 1415 answer ceilf 3 5 answer 4 0 3 200 answer answer Run Time Support Functions 9 49 clearerr Syntax for C Syntax for C Defined in Description Syntax for C Syntax for C Defined in Description 9 50 Clear EOF and Error
Download Pdf Manuals
Related Search
Related Contents
XP-2 Brushless ESCs User Manual #FEJFOVOHTBOMFJUVOH *OTUSVDUJPO NBOVBM ߭ .PEF Plantronics M70 Description d`appareil La passerelle caméra TKS intègre une EYW300 novaWeb Antec Sonata Proto Guía del usuario HP Color LaserJet CP3525 User Guide Harbor Freight Tools 1 Horsepower Wood Shaper Product manual Copyright © All rights reserved.
Failed to retrieve file