SPRUI04F july   2015  – april 2023

 

  1.   Read This First
    1.     About This Manual
    2.     Notational Conventions
    3.     Related Documentation
    4.     Related Documentation From Texas Instruments
    5.     Trademarks
  2. Introduction to the Software Development Tools
    1. 1.1 Software Development Tools Overview
    2. 1.2 Compiler Interface
    3. 1.3 ANSI/ISO Standard
    4. 1.4 Output Files
    5. 1.5 Utilities
  3. Getting Started with the Code Generation Tools
    1. 2.1 How Code Composer Studio Projects Use the Compiler
    2. 2.2 Compiling from the Command Line
  4. Using the C/C++ Compiler
    1. 3.1  About the Compiler
    2. 3.2  Invoking the C/C++ Compiler
    3. 3.3  Changing the Compiler's Behavior with Options
      1. 3.3.1  Linker Options
      2. 3.3.2  Frequently Used Options
      3. 3.3.3  Miscellaneous Useful Options
      4. 3.3.4  Run-Time Model Options
      5. 3.3.5  Selecting Target CPU Version (--silicon_version Option)
      6. 3.3.6  Symbolic Debugging and Profiling Options
      7. 3.3.7  Specifying Filenames
      8. 3.3.8  Changing How the Compiler Interprets Filenames
      9. 3.3.9  Changing How the Compiler Processes C Files
      10. 3.3.10 Changing How the Compiler Interprets and Names Extensions
      11. 3.3.11 Specifying Directories
      12. 3.3.12 Assembler Options
    4. 3.4  Controlling the Compiler Through Environment Variables
      1. 3.4.1 Setting Default Compiler Options (C6X_C_OPTION)
      2. 3.4.2 Naming One or More Alternate Directories (C6X_C_DIR)
    5. 3.5  Controlling the Preprocessor
      1. 3.5.1  Predefined Macro Names
      2. 3.5.2  The Search Path for #include Files
        1. 3.5.2.1 Adding a Directory to the #include File Search Path (--include_path Option)
      3. 3.5.3  Support for the #warning and #warn Directives
      4. 3.5.4  Generating a Preprocessed Listing File (--preproc_only Option)
      5. 3.5.5  Continuing Compilation After Preprocessing (--preproc_with_compile Option)
      6. 3.5.6  Generating a Preprocessed Listing File with Comments (--preproc_with_comment Option)
      7. 3.5.7  Generating Preprocessed Listing with Line-Control Details (--preproc_with_line Option)
      8. 3.5.8  Generating Preprocessed Output for a Make Utility (--preproc_dependency Option)
      9. 3.5.9  Generating a List of Files Included with #include (--preproc_includes Option)
      10. 3.5.10 Generating a List of Macros in a File (--preproc_macros Option)
    6. 3.6  Passing Arguments to main()
    7. 3.7  Understanding Diagnostic Messages
      1. 3.7.1 Controlling Diagnostic Messages
      2. 3.7.2 How You Can Use Diagnostic Suppression Options
    8. 3.8  Other Messages
    9. 3.9  Generating Cross-Reference Listing Information (--gen_cross_reference_listing Option)
    10. 3.10 Generating a Raw Listing File (--gen_preprocessor_listing Option)
    11. 3.11 Using Inline Function Expansion
      1. 3.11.1 Inlining Intrinsic Operators
      2. 3.11.2 Inlining Restrictions
      3. 3.11.3 Unguarded Definition-Controlled Inlining
        1. 3.11.3.1 Using the Inline Keyword
      4. 3.11.4 Guarded Inlining and the _INLINE Preprocessor Symbol
        1. 3.11.4.1 Header File string.h
        2. 3.11.4.2 Library Definition File
    12. 3.12 Interrupt Flexibility Options (--interrupt_threshold Option)
    13. 3.13 Using Interlist
    14. 3.14 Generating and Using Performance Advice
    15. 3.15 About the Application Binary Interface
    16. 3.16 Enabling Entry Hook and Exit Hook Functions
  5. Optimizing Your Code
    1. 4.1  Invoking Optimization
    2. 4.2  Controlling Code Size Versus Speed
    3. 4.3  Performing File-Level Optimization (--opt_level=3 option)
      1. 4.3.1 Creating an Optimization Information File (--gen_opt_info Option)
    4. 4.4  Program-Level Optimization (--program_level_compile and --opt_level=3 options)
      1. 4.4.1 Controlling Program-Level Optimization (--call_assumptions Option)
      2. 4.4.2 Optimization Considerations When Mixing C/C++ and Assembly
    5. 4.5  Automatic Inline Expansion (--auto_inline Option)
    6. 4.6  Optimizing Software Pipelining
      1. 4.6.1 Turn Off Software Pipelining (--disable_software_pipeline Option)
      2. 4.6.2 Software Pipelining Information
        1. 4.6.2.1 Software Pipelining Information
        2. 4.6.2.2 Software Pipelining Information Terms
        3. 4.6.2.3 Loop Disqualified for Software Pipelining Messages
        4. 4.6.2.4 Pipeline Failure Messages
        5. 4.6.2.5 Register Usage Table Generated by the --debug_software_pipeline Option
      3. 4.6.3 Collapsing Prologs and Epilogs for Improved Performance and Code Size
        1. 4.6.3.1 Speculative Execution
        2. 4.6.3.2 Selecting the Best Threshold Value
    7. 4.7  Redundant Loops
    8. 4.8  Utilizing the Loop Buffer Using SPLOOP
    9. 4.9  Reducing Code Size (--opt_for_space (or -ms) Option)
    10. 4.10 Using Feedback Directed Optimization
      1. 4.10.1 Feedback Directed Optimization
        1. 4.10.1.1 Phase 1 -- Collect Program Profile Information
        2. 4.10.1.2 Phase 2 -- Use Application Profile Information for Optimization
        3. 4.10.1.3 Generating and Using Profile Information
        4. 4.10.1.4 Example Use of Feedback Directed Optimization
        5. 4.10.1.5 The .ppdata Section
        6. 4.10.1.6 Feedback Directed Optimization and Code Size Tune
        7. 4.10.1.7 Instrumented Program Execution Overhead
        8. 4.10.1.8 Invalid Profile Data
      2. 4.10.2 Profile Data Decoder
      3. 4.10.3 Feedback Directed Optimization API
      4. 4.10.4 Feedback Directed Optimization Summary
    11. 4.11 Using Profile Information to Get Better Program Cache Layout and Analyze Code Coverage
      1. 4.11.1 Background and Motivation
      2. 4.11.2 Code Coverage
        1. 4.11.2.1 Phase1 -- Collect Program Profile Information
        2. 4.11.2.2 Phase 2 -- Generate Code Coverage Reports
      3. 4.11.3 What Performance Improvements Can You Expect to See?
        1. 4.11.3.1 Evaluating L1P Cache Performance
      4. 4.11.4 Program Cache Layout Related Features and Capabilities
        1. 4.11.4.1 Path Profiler
        2. 4.11.4.2 Analysis Options
        3. 4.11.4.3 Environment Variables
        4. 4.11.4.4 Program Cache Layout Tool, clt6x
        5. 4.11.4.5 Linker
        6. 4.11.4.6 Linker Command File Operator unordered()
      5. 4.11.5 Program Instruction Cache Layout Development Flow
        1. 4.11.5.1 Gather Dynamic Profile Information
        2. 4.11.5.2 Generate Preferred Function Order from Dynamic Profile Information
        3. 4.11.5.3 Utilize Preferred Function Order in Re-Build of Application
      6. 4.11.6 Comma-Separated Values (CSV) Files with Weighted Call Graph (WCG) Information
      7. 4.11.7 Linker Command File Operator - unordered()
        1. 4.11.7.1 Output Section for unordered() Operator
        2.       124
        3. 4.11.7.2 Generated Linker Map File for
        4. 4.11.7.3 About Dot (.) Expressions in the Presence of unordered()
          1. 4.11.7.3.1 Respecting Position of a . Expression
          2.        128
        5. 4.11.7.4 GROUPs and UNIONs
          1. 4.11.7.4.1 Applying unordered() to GROUPs
        6.       131
      8. 4.11.8 Things to be Aware of
    12. 4.12 Indicating Whether Certain Aliasing Techniques Are Used
      1. 4.12.1 Use the --aliased_variables Option When Certain Aliases are Used
      2. 4.12.2 Use the --no_bad_aliases Option to Indicate That These Techniques Are Not Used
      3. 4.12.3 Using the --no_bad_aliases Option With the Assembly Optimizer
    13. 4.13 Prevent Reordering of Associative Floating-Point Operations
    14. 4.14 Use Caution With asm Statements in Optimized Code
    15. 4.15 Using Performance Advice to Optimize Your Code
      1. 4.15.1  Advice #27000
      2. 4.15.2  Advice #27001 Increase Optimization Level
      3. 4.15.3  Advice #27002 Do not turn off software pipelining
      4. 4.15.4  Advice #27003 Avoid compiling with debug options
      5. 4.15.5  Advice #27004 No Performance Advice generated
      6. 4.15.6  Advice #30000 Prevent Loop Disqualification due to call
      7. 4.15.7  Advice #30001 Prevent Loop Disqualification due to rts-call
      8. 4.15.8  Advice #30002 Prevent Loop Disqualification due to asm statement
      9. 4.15.9  Advice #30003 Prevent Loop Disqualification due to complex condition
      10. 4.15.10 Advice #30004 Prevent Loop Disqualification due to switch statement
      11. 4.15.11 Advice #30005 Prevent Loop Disqualification due to arithmetic operation
      12. 4.15.12 Advice #30006 Prevent Loop Disqualification due to call(2)
      13. 4.15.13 Advice #30007 Prevent Loop Disqualification due to rts-call(2)
      14. 4.15.14 Advice #30008 Improve Loop; Qualify with restrict
      15. 4.15.15 Advice #30009 Improve Loop; Add MUST_ITERATE pragma
      16. 4.15.16 Advice #30010 Improve Loop; Add MUST_ITERATE pragma(2)
      17. 4.15.17 Advice #30011 Improve Loop; Add _nasssert()
    16. 4.16 Using the Interlist Feature With Optimization
    17. 4.17 Debugging and Profiling Optimized Code
      1. 4.17.1 Profiling Optimized Code
    18. 4.18 What Kind of Optimization Is Being Performed?
      1. 4.18.1  Cost-Based Register Allocation
      2. 4.18.2  Alias Disambiguation
      3. 4.18.3  Branch Optimizations and Control-Flow Simplification
      4. 4.18.4  Data Flow Optimizations
      5. 4.18.5  Expression Simplification
      6. 4.18.6  Inline Expansion of Functions
      7. 4.18.7  Function Symbol Aliasing
      8. 4.18.8  Induction Variables and Strength Reduction
      9. 4.18.9  Loop-Invariant Code Motion
      10. 4.18.10 Loop Rotation
      11. 4.18.11 Vectorization (SIMD)
      12. 4.18.12 Instruction Scheduling
      13. 4.18.13 Register Variables
      14. 4.18.14 Register Tracking/Targeting
      15. 4.18.15 Software Pipelining
  6. Using the Assembly Optimizer
    1. 5.1 Code Development Flow to Increase Performance
    2. 5.2 About the Assembly Optimizer
    3. 5.3 What You Need to Know to Write Linear Assembly
      1. 5.3.1 Linear Assembly Source Statement Format
      2. 5.3.2 Register Specification for Linear Assembly
        1. 5.3.2.1 Linear Assembly Code for Computing a Dot Product
        2.       183
        3. 5.3.2.2 C Code for Computing a Dot Product
        4.       185
        5. 5.3.2.3 Specifying a Register Pair
        6.       187
        7. 5.3.2.4 Specifying a Register Quad (C6600 Only)
        8.       189
      3. 5.3.3 Functional Unit Specification for Linear Assembly
      4. 5.3.4 Using Linear Assembly Source Comments
        1. 5.3.4.1 Lmac Function Code Showing Comments
      5. 5.3.5 Assembly File Retains Your Symbolic Register Names
    4. 5.4 Assembly Optimizer Directives
      1.      .call
      2.      .circ
      3.      .cproc/.endproc
      4.      .map
      5.      .mdep
      6.      .mptr
      7.      .no_mdep
      8.      .pref
      9.      .proc/.endproc
      10.      .reg
      11.      .rega/.regb
      12.      .reserve
      13.      .return
      14.      .trip
      15.      .volatile
      16. 5.4.1 Instructions That Are Not Allowed in Procedures
    5. 5.5 Avoiding Memory Bank Conflicts With the Assembly Optimizer
      1. 5.5.1 Preventing Memory Bank Conflicts
        1. 5.5.1.1 Load and Store Instructions That Specify Memory Bank Information
      2. 5.5.2 A Dot Product Example That Avoids Memory Bank Conflicts
        1. 5.5.2.1 C Code for Dot Product
        2. 5.5.2.2 Linear Assembly for Dot Product
        3. 5.5.2.3 Dot Product Software-Pipelined Kernel
        4.       218
        5. 5.5.2.4 Dot Product From Unrolled to Prevent Memory Bank Conflicts
        6.       220
        7. 5.5.2.5 Unrolled Dot Product Kernel From
        8.       222
      3. 5.5.3 Memory Bank Conflicts for Indexed Pointers
        1. 5.5.3.1 Using .mptr for Indexed Pointers
      4. 5.5.4 Memory Bank Conflict Algorithm
    6. 5.6 Memory Alias Disambiguation
      1. 5.6.1 How the Assembly Optimizer Handles Memory References (Default)
      2. 5.6.2 Using the --no_bad_aliases Option to Handle Memory References
      3. 5.6.3 Using the .no_mdep Directive
      4. 5.6.4 Using the .mdep Directive to Identify Specific Memory Dependencies
        1. 5.6.4.1 Annotating a Memory Reference
        2.       232
        3. 5.6.4.2 Software Pipeline Using .mdep ld1, st1
        4.       234
        5. 5.6.4.3 Software Pipeline Using .mdep st1, ld1 and .mdep ld1, st1
        6.       236
      5. 5.6.5 Memory Alias Examples
  7. Linking C/C++ Code
    1. 6.1 Invoking the Linker Through the Compiler (-z Option)
      1. 6.1.1 Invoking the Linker Separately
      2. 6.1.2 Invoking the Linker as Part of the Compile Step
      3. 6.1.3 Disabling the Linker (--compile_only Compiler Option)
    2. 6.2 Linker Code Optimizations
      1. 6.2.1 Conditional Linking
      2. 6.2.2 Generating Function Subsections (--gen_func_subsections Compiler Option)
      3. 6.2.3 Generating Aggregate Data Subsections (--gen_data_subsections Compiler Option)
    3. 6.3 Controlling the Linking Process
      1. 6.3.1 Including the Run-Time-Support Library
        1. 6.3.1.1 Automatic Run-Time-Support Library Selection
          1. 6.3.1.1.1 Using the --issue_remarks Option
        2. 6.3.1.2 Manual Run-Time-Support Library Selection
        3. 6.3.1.3 Library Order for Searching for Symbols
      2. 6.3.2 Run-Time Initialization
      3. 6.3.3 Global Object Constructors
      4. 6.3.4 Specifying the Type of Global Variable Initialization
      5. 6.3.5 Specifying Where to Allocate Sections in Memory
      6. 6.3.6 A Sample Linker Command File
  8. C/C++ Language Implementation
    1. 7.1  Characteristics of TMS320C6000 C
      1. 7.1.1 Implementation-Defined Behavior
    2. 7.2  Characteristics of TMS320C6000 C++
    3. 7.3  Data Types
      1. 7.3.1 Size of Enum Types
      2. 7.3.2 Vector Data Types
    4. 7.4  File Encodings and Character Sets
    5. 7.5  Keywords
      1. 7.5.1 The complex Keyword
      2. 7.5.2 The const Keyword
      3. 7.5.3 The __cregister Keyword
        1. 7.5.3.1 Define and Use Control Registers
      4. 7.5.4 The __interrupt Keyword
      5. 7.5.5 The __near and __far Keywords
        1. 7.5.5.1 Near and Far Data Objects
        2. 7.5.5.2 Near and Far Function Calls
      6. 7.5.6 The restrict Keyword
      7. 7.5.7 The volatile Keyword
    6. 7.6  C++ Exception Handling
    7. 7.7  Register Variables and Parameters
    8. 7.8  The __asm Statement
    9. 7.9  Pragma Directives
      1. 7.9.1  The CALLS Pragma
      2. 7.9.2  The CODE_ALIGN Pragma
      3. 7.9.3  The CODE_SECTION Pragma
      4. 7.9.4  The DATA_ALIGN Pragma
      5. 7.9.5  The DATA_MEM_BANK Pragma
        1. 7.9.5.1 Using the DATA_MEM_BANK Pragma
      6. 7.9.6  The DATA_SECTION Pragma
        1. 7.9.6.1 Using the DATA_SECTION Pragma C Source File
        2. 7.9.6.2 Using the DATA_SECTION Pragma C++ Source File
        3. 7.9.6.3 Using the DATA_SECTION Pragma Assembly Source File
      7. 7.9.7  The Diagnostic Message Pragmas
      8. 7.9.8  The FORCEINLINE Pragma
      9. 7.9.9  The FORCEINLINE_RECURSIVE Pragma
      10. 7.9.10 The FUNC_ALWAYS_INLINE Pragma
      11. 7.9.11 The FUNC_CANNOT_INLINE Pragma
      12. 7.9.12 The FUNC_EXT_CALLED Pragma
      13. 7.9.13 The FUNC_INTERRUPT_THRESHOLD Pragma
      14. 7.9.14 The FUNC_IS_PURE Pragma
      15. 7.9.15 The FUNC_IS_SYSTEM Pragma
      16. 7.9.16 The FUNC_NEVER_RETURNS Pragma
      17. 7.9.17 The FUNC_NO_GLOBAL_ASG Pragma
      18. 7.9.18 The FUNC_NO_IND_ASG Pragma
      19. 7.9.19 The FUNCTION_OPTIONS Pragma
      20. 7.9.20 The INTERRUPT Pragma
      21. 7.9.21 The LOCATION Pragma
      22. 7.9.22 The MUST_ITERATE Pragma
        1. 7.9.22.1 The MUST_ITERATE Pragma Syntax
        2. 7.9.22.2 Using MUST_ITERATE to Expand Compiler Knowledge of Loops
      23. 7.9.23 The NMI_INTERRUPT Pragma
      24. 7.9.24 The NOINIT and PERSISTENT Pragmas
      25. 7.9.25 The NOINLINE Pragma
      26. 7.9.26 The NO_HOOKS Pragma
      27. 7.9.27 The once Pragma
      28. 7.9.28 The pack Pragma
      29. 7.9.29 The PROB_ITERATE Pragma
      30. 7.9.30 The RETAIN Pragma
      31. 7.9.31 The SET_CODE_SECTION and SET_DATA_SECTION Pragmas
      32. 7.9.32 The STRUCT_ALIGN Pragma
      33. 7.9.33 The UNROLL Pragma
    10. 7.10 The _Pragma Operator
    11. 7.11 Application Binary Interface
    12. 7.12 Object File Symbol Naming Conventions (Linknames)
    13. 7.13 Changing the ANSI/ISO C/C++ Language Mode
      1. 7.13.1 C99 Support (--c99)
      2. 7.13.2 C11 Support (--c11)
      3. 7.13.3 Strict ANSI Mode and Relaxed ANSI Mode (--strict_ansi and --relaxed_ansi)
    14. 7.14 GNU and Clang Language Extensions
      1. 7.14.1 Extensions
      2. 7.14.2 Function Attributes
      3. 7.14.3 For Loop Attributes
      4. 7.14.4 Variable Attributes
      5. 7.14.5 Type Attributes
      6. 7.14.6 Built-In Functions
    15. 7.15 Operations and Functions for Vector Data Types
      1. 7.15.1 Vector Literals and Concatenation
      2. 7.15.2 Unary and Binary Operators for Vectors
      3. 7.15.3 Swizzle Operators for Vectors
      4. 7.15.4 Conversion Functions for Vectors
      5. 7.15.5 Re-Interpretation Functions for Vectors
      6. 7.15.6 Using printf() with Vectors
      7. 7.15.7 Built-In Vector Functions
  9. Run-Time Environment
    1. 8.1  Memory Model
      1. 8.1.1 Sections
      2. 8.1.2 C/C++ System Stack
      3. 8.1.3 Dynamic Memory Allocation
      4. 8.1.4 Data Memory Models
        1. 8.1.4.1 Determining the Data Address Model
        2. 8.1.4.2 DP-Relative Vs. Absolute Addressing
        3. 8.1.4.3 Const Objects as Far
      5. 8.1.5 Trampoline Generation for Function Calls
      6. 8.1.6 Position Independent Data
    2. 8.2  Object Representation
      1. 8.2.1 Data Type Storage
        1. 8.2.1.1 char and short Data Types (signed and unsigned)
        2. 8.2.1.2 enum, int, and long Data Types (signed and unsigned)
        3. 8.2.1.3 float Data Type
        4. 8.2.1.4 The __int40_t Data Type (signed and unsigned)
        5. 8.2.1.5 long long Data Types (signed and unsigned)
        6. 8.2.1.6 double and long double Data Types
        7. 8.2.1.7 Pointer to Data Member Types
        8. 8.2.1.8 Pointer to Member Function Types
        9. 8.2.1.9 Structures and Arrays
      2. 8.2.2 Bit Fields
      3. 8.2.3 Character String Constants
      4.      366
    3. 8.3  Register Conventions
    4. 8.4  Function Structure and Calling Conventions
      1. 8.4.1 How a Function Makes a Call
      2. 8.4.2 How a Called Function Responds
      3. 8.4.3 Accessing Arguments and Local Variables
    5. 8.5  Accessing Linker Symbols in C and C++
    6. 8.6  Interfacing C and C++ With Assembly Language
      1. 8.6.1  Using Assembly Language Modules With C/C++ Code
      2. 8.6.2  Accessing Assembly Language Functions From C/C++
        1. 8.6.2.1 Calling an Assembly Language Function From a C/C++ Program
        2. 8.6.2.2 Assembly Language Program Called by
        3.       378
      3. 8.6.3  Accessing Assembly Language Variables From C/C++
        1. 8.6.3.1 Accessing Assembly Language Global Variables
          1. 8.6.3.1.1 Assembly Language Variable Program
          2. 8.6.3.1.2 C Program to Access Assembly Language From
        2.       383
        3. 8.6.3.2 Accessing Assembly Language Constants
          1. 8.6.3.2.1 Accessing an Assembly Language Constant From C
          2. 8.6.3.2.2 Assembly Language Program for
          3.        387
      4. 8.6.4  Sharing C/C++ Header Files With Assembly Source
      5. 8.6.5  Using Inline Assembly Language
      6. 8.6.6  Using Intrinsics to Access Assembly Language Statements
      7. 8.6.7  The __x128_t Container Type
        1. 8.6.7.1 The __x128_t Container Type
        2.       393
      8. 8.6.8  The __float2_t Container Type
      9. 8.6.9  Using Intrinsics for Interrupt Control and Atomic Sections
      10. 8.6.10 Using Unaligned Data and 64-Bit Values
        1. 8.6.10.1 Using the _mem8 Intrinsic
      11. 8.6.11 Using MUST_ITERATE and _nassert to Enable SIMD and Expand Compiler Knowledge of Loops
      12. 8.6.12 Methods to Align Data
        1. 8.6.12.1 Base Address of an Array
        2. 8.6.12.2 Offset from the Base of an Array
        3. 8.6.12.3 Dynamic Memory Allocation
        4. 8.6.12.4 Member of a Structure or Class
          1. 8.6.12.4.1 An Array in a Structure
          2. 8.6.12.4.2 An Array in a Class
          3.        406
      13. 8.6.13 SAT Bit Side Effects
      14. 8.6.14 IRP and AMR Conventions
      15. 8.6.15 Floating Point and Saturation Control Register Side Effects
    7. 8.7  Interrupt Handling
      1. 8.7.1 Saving the SGIE Bit
      2. 8.7.2 Saving Registers During Interrupts
      3. 8.7.3 Using C/C++ Interrupt Routines
      4. 8.7.4 Using Assembly Language Interrupt Routines
    8. 8.8  Run-Time-Support Arithmetic Routines
    9. 8.9  System Initialization
      1. 8.9.1 Boot Hook Functions for System Pre-Initialization
      2. 8.9.2 Automatic Initialization of Variables
        1. 8.9.2.1 Zero Initializing Variables
        2. 8.9.2.2 Direct Initialization
        3. 8.9.2.3 Autoinitialization of Variables at Run Time
        4. 8.9.2.4 Autoinitialization Tables
          1. 8.9.2.4.1 Length Followed by Data Format
          2. 8.9.2.4.2 Zero Initialization Format
          3. 8.9.2.4.3 Run Length Encoded (RLE) Format
          4. 8.9.2.4.4 Lempel-Ziv-Storer-Szymanski Compression (LZSS) Format
          5. 8.9.2.4.5 Sample C Code to Process the C Autoinitialization Table
        5. 8.9.2.5 Initialization of Variables at Load Time
        6. 8.9.2.6 Global Constructors
    10. 8.10 Support for Multi-Threaded Applications
      1. 8.10.1 Compiling with OpenMP
      2. 8.10.2 Multi-Threading Runtime Support
        1. 8.10.2.1 Runtime Thread Safety
        2. 8.10.2.2 Thread Creation, Initialization, and Termination
        3. 8.10.2.3 Thread Local Storage (TLS)
        4. 8.10.2.4 Accessing Shared Data
  10. Using Run-Time-Support Functions and Building Libraries
    1. 9.1 C and C++ Run-Time Support Libraries
      1. 9.1.1 Linking Code With the Object Library
      2. 9.1.2 Header Files
      3. 9.1.3 Modifying a Library Function
      4. 9.1.4 Support for String Handling
      5. 9.1.5 Minimal Support for Internationalization
      6. 9.1.6 Support for Time and Clock Functions
      7. 9.1.7 Allowable Number of Open Files
      8. 9.1.8 Library Naming Conventions
    2. 9.2 The C I/O Functions
      1. 9.2.1 High-Level I/O Functions
        1. 9.2.1.1 Formatting and the Format Conversion Buffer
      2. 9.2.2 Overview of Low-Level I/O Implementation
        1.       open
        2.       close
        3.       read
        4.       write
        5.       lseek
        6.       unlink
        7.       rename
      3. 9.2.3 Device-Driver Level I/O Functions
        1.       DEV_open
        2.       DEV_close
        3.       DEV_read
        4.       DEV_write
        5.       DEV_lseek
        6.       DEV_unlink
        7.       DEV_rename
      4. 9.2.4 Adding a User-Defined Device Driver for C I/O
        1. 9.2.4.1 Mapping Default Streams to Device
      5. 9.2.5 The device Prefix
        1.       add_device
        2.       470
        3. 9.2.5.1 Program for C I/O Device
    3. 9.3 Handling Reentrancy (_register_lock() and _register_unlock() Functions)
    4. 9.4 Library-Build Process
      1. 9.4.1 Required Non-Texas Instruments Software
      2. 9.4.2 Using the Library-Build Process
        1. 9.4.2.1 Automatic Standard Library Rebuilding by the Linker
        2. 9.4.2.2 Invoking mklib Manually
          1. 9.4.2.2.1 Building Standard Libraries
          2. 9.4.2.2.2 Shared or Read-Only Library Directory
          3. 9.4.2.2.3 Building Libraries With Custom Options
          4. 9.4.2.2.4 The mklib Program Option Summary
      3. 9.4.3 Extending mklib
        1. 9.4.3.1 Underlying Mechanism
        2. 9.4.3.2 Libraries From Other Vendors
  11. 10C++ Name Demangler
    1. 10.1 Invoking the C++ Name Demangler
    2. 10.2 Sample Usage of the C++ Name Demangler
  12.   A Glossary
    1.     A.1 Terminology
  13.   B Revision History
  14.   491
  15.   492
  16.   B Earlier Revisions

Terminology

    alias disambiguation

    A technique that determines when two pointer expressions 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 optimization, 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.

    ANSI

    American National Standards Institute; an organization that establishes standards voluntarily followed by industries.

    Application Binary Interface (ABI)

    A standard that specifies the interface between two object modules. An ABI specifies how functions are called and how information is passed from one program component to another.

    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 single 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, directives, and macro definitions. The assembler substitutes absolute operation codes for symbolic operation codes and absolute or relocatable addresses for symbolic addresses.

    assignment statement

    A statement that initializes a variable with a value.

    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 it with the --rom_model link option. The linker loads the .cinit section of data tables 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 determined 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 object file sections. You use the assembler .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/ISO 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.

    code generator

    A compiler tool that takes the file produced by the parser or the optimizer and produces an assembly language source file.

    COFF

    Common object file format; a system of object files configured according to a standard developed by AT&T. This ABI is no longer supported.

    command file

    A file that contains options, filenames, directives, or commands for the linker or hex conversion utility.

    comment

    A source statement (or portion of a source statement) that documents or improves readability of a source file. Comments are not compiled, assembled, or linked; they have no effect on the object file.

    compiler program

    A utility that lets you compile, assemble, and optionally link in one step. The compiler runs one or more source modules through the compiler (including the parser, optimizer, and code generator), the assembler, and the linker.

    configured memory

    Memory that the linker has specified for allocation.

    constant

    A type whose value cannot change.

    cross-reference listing

    An output file created by the assembler that lists the symbols that were defined, what line they were defined on, which lines referenced them, and their final values.

    .data section

    One of the default object file sections. The .data section is an initialized section that contains initialized data. You can use the .data directive to assemble code into the .data section.

    direct call

    A function call where one function calls another using the function's name.

    directives

    Special-purpose commands that control the actions and functions of a software tool (as opposed to assembly language instructions, which control the actions of a device).

    disambiguation

    See alias disambiguation

    dynamic memory allocation

    A technique used by several functions (such as malloc, calloc, and realloc) to dynamically allocate memory for variables at run time. This is accomplished by defining a large memory pool (heap) and using the functions to allocate memory from the heap.

    ELF

    Executable and Linkable Format; a system of object files configured according to the System V Application Binary Interface specification.

    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 Windows batch files or UNIX shell scripts such as .cshrc or .profile.

    epilog

    The portion of code in a function that restores the stack and returns.

    executable object file

    A linked, executable object file that is downloaded and executed on a target system.

    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.

    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 opposed to program-level optimization, where the compiler uses information 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 the current module but defined in another.

    high-level language debugging

    The ability of a compiler to retain symbolic and high-level language information (such as type and function definitions) so that a debugging tool can use this information.

    indirect call

    A function call where one function calls another function by giving 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 it with the --ram_model link option. This method initializes variables at load time instead of run time.

    initialized section

    A section from an object file that will be linked into an executable object file.

    input section

    A section from an object file that will be linked into an executable object file.

    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 feature

    A feature 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 instructions.

    intrinsics

    Operators that are used like functions and produce assembly language code that would otherwise be inexpressible in C, or would take greater time and effort to code.

    ISO

    International Organization for Standardization; a worldwide federation of national standards bodies, which establishes international standards voluntarily followed by industries.

    kernel

    The body of a software-pipelined loop between the pipelined-loop prolog and the pipelined-loop epilog.

    K&R C

    Kernighan and Ritchie C, the de facto standard as defined in the first edition of The C Programming Language (K&R). Most K&R C programs written for earlier, non-ISO C compilers 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.

    linker

    A software program that combines object files to form an executable object file that can be allocated into system memory and executed by the device.

    listing file

    An output file, created by the assembler, which lists source statements, 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 numbered addresses. Endian ordering is hardware-specific and is determined at reset. See also big endian

    loader

    A device that places an executable object file into system memory.

    loop unrolling

    An optimization that expands small loops so that each iteration of the loop appears in your code. Although loop unrolling increases code size, it can improve the performance of your code.

    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, which shows the memory configuration, section composition, section allocation, symbol definitions and the addresses at which the symbols were defined for your program.

    memory map

    A map of target system memory space that is partitioned into functional blocks.

    name mangling

    A compiler-specific feature that encodes a function name with information regarding the function's arguments return types.

    object file

    An assembled or linked file that contains machine-language object code.

    object library

    An archive library made up of individual object files.

    operand

    An argument of an assembly language instruction, assembler directive, or macro directive that supplies information to the operation performed 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 section

    A final, allocated section in a linked, executable module.

    parser

    A software 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.

    pipelining

    A technique where a second instruction begins executing before the first instruction has been completed. You can have several instructions in the pipeline, each at a different processing stage.

    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 performed 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.

    push

    An operation that places a data object on a stack for temporary storage.

    quiet run

    An option that suppresses the normal banner and the progress information.

    raw data

    Executable code or initialized data in an output section.

    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 register conventions, stack organization, function call conventions, and system initialization.

    run-time-support functions

    Standard ISO 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, which contains the source for the run time-support functions.

    section

    A relocatable block of code or data that ultimately will be contiguous with other sections in the memory map.

    sign extend

    A process that fills the unused MSBs of a value with the value's sign bit.

    software pipelining

    A technique used by the C/C++ optimizer to schedule instructions from a loop so that multiple iterations 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 performs integrated preprocessing, which includes parsing of instructions.

    static variable

    A variable whose scope is confined to a function or a program. The values of static variables are not discarded when the function or program is exited; their previous value is resumed when the function or program is reentered.

    storage class

    An entry in the symbol table that indicates how to access a symbol.

    string table

    A table that stores symbol names that are longer than eight characters (symbol names of eight characters or longer cannot be stored in the symbol table; instead they are stored in the string table). The name portion of the symbol's entry points to the location of the string in the string table.

    subsection

    A relocatable block of code or data that ultimately will occupy continuous space in the memory map. Subsections are smaller sections within larger sections. Subsections give you tighter control of the memory map.

    symbol

    A string of alphanumeric characters that represents an address or a value.

    symbolic debugging

    The ability of a software tool to retain symbolic information that can be used by a debugging tool such as an emulator.

    target system

    The system on which the object code you have developed is executed.

    .text section

    One of the default object file sections. The .text section is initialized and contains executable code. You can use the .text directive to assemble code into the .text section.

    trigraph sequence

    A 3-character sequence that has a meaning (as defined by the ISO 646-1983 Invariant Code Set). These characters cannot be represented in the C character set and are expanded to one character. For example, the trigraph ??' is expanded to ^.

    trip count

    The number of times that a loop executes before it terminates.

    unconfigured memory

    Memory that is not defined as part of the memory map and cannot be loaded with code or data.

    uninitialized section

    A object file section that reserves space in the memory map but that has no actual contents. These sections are built with the .bss and .usect directives.

    unsigned value

    A value that is treated as a nonnegative number, regardless of its actual sign.

    word

    A 32-bit addressable location in target memory