Chapter 9 Writing Machine Language Instructions and Directive Statements
Writing Directive Statements 177
9.4.18 funcinfo
Syntax
label operation operand
function_namefuncinfo label_name, expression, register list
where expression: Stack frame size
Functional description
This directive provides additional information about a function name specified as the operand to a call
instruction. The call instruction branches to the function after saving registers to the stack and setting
up the stack frame. To use call instructions, the program must define the stack frame size and the reg-
isters to be saved using a special format in the function’s declaration section. This special format takes
the form of the funcinfo directive.l
The linker uses the specified stack size and register list to automatically set up the proper calling se-
quences for calls to the function.
Operand coding rules
The label_name gives the branch target used by instructions other than the call instruction--the call in-
struction, for example. This label_name is necessary even if no other instructions call it. In that case,
assign a label to any empty statement immediately preceding the funcinfo directive and use the name of
that label. The label_name must be defined prior to the funcinfo directive. Otherwise, an error results.
The expression gives the size of the stack frame used by the function. It must evaluate to a value be-
tween 0 and255. A value outside this range results in an error. The register list gives a list of registers
to be saved to the stack before entering the function proper. Enclose the list in square brackets ([ ]) and
separate the registers in the list with commas. The registers that can appear in the list are D2, D3, A2,
A3 and OTHER, where OTHER indicates D0, D1, A0, A1, MDR, LIR. A register specification other
than these five results in an error.
NOTE: When writing directive statements in between the function and label_name, it
may not link properly or it may create a bad execution format.
NOTE: Optimization can be performed for the instructions between label_name and the
function name. For details, see Chapter 4 “Optimization Functions” Section 4.3
“Usage Examples”, “Optimization of function calls”.

Directive Specification Rules

The funcinfo directive must always define a branch target label for use with the call instruction.