viii
SC100 C Compiler
5.4
5.4.1
5.4.2
5.4.2.1
5.4.2.2
5.4.3
5.4.3.1
5.4.3.2
5.4.3.3
5.4.3.4
5.4.3.5
5.5
Guidelines for Using the Optimizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-31
Partial Summation Techniques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-32
Multisample Techniques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-35
Multisample implementation issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-37
Implementation example. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-39
General Hints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-43
Software pipelining. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-43
Passing and returning large structs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-43
Arithmetic operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-43
Local variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-43
Resource limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-44
Optimizer Assumptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-44
Chapter 6
Runtime Environment
6.1
6.1.1
6.1.2
6.1.2.1
6.1.2.2
6.1.2.3
6.1.2.4
6.1.3
6.2
6.2.1
6.3
6.3.1
6.3.1.1
6.3.1.2
6.3.2
6.3.3
6.3.3.1
6.3.4
6.3.4.1
6.3.5
6.3.5.1
6.3.5.2
6.3.5.3
6.3.5.4
6.4
6.4.1
6.4.2
6.4.3
6.4.4
6.4.5
6.4.6
Startup Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-1
Bare Board Startup Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-2
C Environment Startup Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-3
C environment initialization code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-3
Initialization of variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-3
C environment finalization code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-3
Low level I/O services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-3
Configuring Your Startup Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-4
Memory Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-5
Linker Command Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-5
Memory Layout and Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-6
Stack and Heap Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-7
Runtime stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-7
Dynamic memory allocation (heap) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-8
Static Data Allocation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-8
Configuring the Memory Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-9
Memory map configuration example . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-9
Machine Configuration File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-10
Defining the memory configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-10
Application Configuration File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-12
File structure and syntax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-13
Schedule section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-13
Binding section. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-15
Overlay section. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-16
Calling Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-18
Stack Pointer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-18
Stack-Based Calling Convention . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-18
Optimized Calling Sequences. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-20
Stack Frame Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-21
Interrupt Handlers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-22
Frame Pointer and Argument Pointer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6-22