
- •Chapter 1. Introduction
- •Support for all 8051 Variants
- •Books About the C Language
- •Chapter 2. Compiling with the Cx51 Compiler
- •Environment Variables
- •Running Cx51 from the Command Prompt
- •ERRORLEVEL
- •Cx51 Output Files
- •Control Directives
- •Directive Categories
- •Reference
- •Chapter 3. Language Extensions
- •Keywords
- •Memory Areas
- •Program Memory
- •Internal Data Memory
- •External Data Memory
- •Far Memory
- •Special Function Register Memory
- •Memory Models
- •Small Model
- •Compact Model
- •Large Model
- •Memory Types
- •Explicitly Declared Memory Types
- •Implicit Memory Types
- •Data Types
- •Bit Types
- •Special Function Registers
- •sbit
- •Absolute Variable Location
- •Pointers
- •Generic Pointers
- •Pointer Conversions
- •Abstract Pointers
- •Function Declarations
- •Function Parameters and the Stack
- •Passing Parameters in Registers
- •Function Return Values
- •Specifying the Memory Model for a Function
- •Specifying the Register Bank for a Function
- •Register Bank Access
- •Interrupt Functions
- •Reentrant Functions
- •Chapter 4. Preprocessor
- •Directives
- •Stringize Operator
- •Predefined Macro Constants
- •Chapter 5. 8051 Derivatives
- •Analog Devices MicroConverter B2 Series
- •Atmel 89x8252 and Variants
- •Dallas 80C320, 420, 520, and 530
- •Arithmetic Accelerator
- •Data Pointers
- •Library Routines
- •Philips 8xC750, 8xC751, and 8xC752
- •Philips 80C51MX Architecture
- •Philips and Atmel WM Dual DPTR
- •Customization Files
- •STARTUP.A51
- •INIT.A51
- •XBANKING.A51
- •Basic I/O Functions
- •Memory Allocation Functions
- •Optimizer
- •General Optimizations
- •Options for Code Generation
- •Segment Naming Conventions
- •Data Objects
- •Program Objects
- •Interfacing C Programs to Assembler
- •Function Parameters
- •Parameter Passing in Registers
- •Parameter Passing in Fixed Memory Locations
- •Function Return Values
- •Using the SRC Directive
- •Register Usage
- •Overlaying Segments
- •Example Routines
- •Small Model Example
- •Compact Model Example
- •Large Model Example
- •Data Storage Formats
- •Bit Variables
- •Signed and Unsigned Long Integers
- •Generic and Far Pointers
- •Floating-point Numbers
- •Accessing Absolute Memory Locations
- •Absolute Memory Access Macros
- •Linker Location Controls
- •The _at_ Keyword
- •Debugging
- •Chapter 7. Error Messages
- •Fatal Errors
- •Actions
- •Errors
- •Syntax and Semantic Errors
- •Warnings
- •Chapter 8. Library Reference
- •Intrinsic Routines
- •Library Files
- •Standard Types
- •va_list
- •Absolute Memory Access Macros
- •CBYTE
- •CWORD
- •DBYTE
- •DWORD
- •FARRAY, FCARRAY
- •FVAR, FCVAR,
- •PBYTE
- •PWORD
- •XBYTE
- •XWORD
- •Routines by Category
- •Buffer Manipulation
- •Character Conversion and Classification
- •Data Conversion
- •Math Routines
- •Memory Allocation Routines
- •Stream Input and Output Routines
- •String Manipulation Routines
- •Miscellaneous Routines
- •Include Files
- •8051 Special Function Register Include Files
- •ABSACC.H
- •ASSERT.H
- •CTYPE.H
- •INTRINS.H
- •MATH.H
- •SETJMP.H
- •STDARG.H
- •STDDEF.H
- •STDIO.H
- •STDLIB.H
- •STRING.H
- •Reference
- •Compiler-related Differences
- •Library-related Differences
- •Appendix B. Version Differences
- •Version 6.0 Differences
- •Version 5 Differences
- •Version 4 Differences
- •Version 3.4 Differences
- •Version 3.2 Differences
- •Version 3.0 Differences
- •Version 2 Differences
- •Appendix C. Writing Optimum Code
- •Memory Model
- •Variable Location
- •Variable Size
- •Unsigned Types
- •Local Variables
- •Other Sources
- •Appendix D. Compiler Limits
- •Appendix E. Byte Ordering
- •Recursive Code Reference Error
- •Problems Using the printf Routines
- •Uncalled Functions
- •Using Monitor-51
- •Trouble with the bdata Memory Type
- •Function Pointers
- •Glossary
- •Index
Keil Software — Cx51 Compiler User’s Guide |
157 |
|
|
Optimizer
The Cx51 compiler is an optimizing compiler. This means that the compiler takes certain steps to ensure that the code generated and output to the object file is the most efficient (smallest and/or fastest) code possible. The compiler analyzes the generated code to produce more efficient instruction sequences. This ensures that your Cx51 compiler program runs as quickly as possible.
The Cx51 compiler provides several different levels of optimizing. Refer to “OPTIMIZE” on page 63 for detailed information.
General Optimizations
Optimization |
Description |
|
|
|
Constant Folding |
Several constant values occurring in an expression or |
|
|
|
|
address calculation are combined as a constant. |
|
|
|
Jump Optimizing |
Jumps are inverted or extended to the final target address |
|
|
|
|
when the program efficiency is thereby increased. |
|
|
|
Dead Code Elimination |
Code which cannot be reached (dead code) is removed from |
|
|
|
|
the program. |
|
|
|
Register Variables |
Automatic variables and function arguments are located in |
|
|
|
|
registers when possible. Reservation of data memory for |
|
|
|
|
these variables is omitted. |
|
|
|
Parameter Passing Via Registers |
A maximum of three function arguments can be passed in |
|
|
|
|
registers. |
|
|
|
Global Common Subexpression |
Identical subexpressions or address calculations that occur |
|
|
|
6 |
||||
Elimination |
multiple times in a function are recognized and calculated |
|
||
|
only once when possible. |
|
||
Reuse of Common Entry Code |
When there are multiple calls to a single function, some of |
|
||
|
the setup code can be reused, thereby reducing program |
|
|
|
|
size. |
|
|
|
|
|
|||
Common Block Subroutines |
Detects recurring instruction sequences and converts them |
|
|
|
|
into subroutines. The compiler even rearranges code to |
|
|
|
|
obtain larger recurring sequences. |
|
|
|
|
|
|
|

158 Chapter 6. Advanced Programming Techniques
8051-Specific Optimizations
Optimization |
Description |
Peephole Optimization |
Complex operations are replaced by simplified operations when |
|
memory space or execution time can be saved as a result. |
Extended Access Optimizing |
Constants and variables are directly included in operations. |
Data Overlaying |
Data and bit segments of functions are identified as |
|
OVERLAYABLE and are overlaid with other data and bit |
|
segments by the BL51 Linker/Locator. |
Case/Switch Optimizing |
Optimize switch case statements by using a jump table or string |
|
of jumps. |
Options for Code Generation
Optimization |
Description |
OPTIMIZE(SIZE) |
Common C operations are replaced by subprograms. Program code |
|
is thereby reduced. |
NOAREGS |
The Cx51 compiler no longer uses absolute register access. Program |
|
code is independent of the register bank. |
NOREGPARMS |
Parameter passing is always performed in local data segments. The |
|
program code is compatible to earlier versions of Cx51. |
6