Technical data

#pragma Directives [3]
3.10.1 align Directive (UNICOS Systems)
The align directive causes functions, loops, or labels to be aligned on instruction
buffer boundaries. This increases the size of the compiled program but improves
loop performance. When used in global scope, the align directive specifies that
functions be aligned on instruction buffer boundaries. When used in local scope,
this directive lets you specify that the loop or label following the directive is to be
aligned on an instruction buffer boundary.
To determine the number and size of the instruction buffers on your system, use
the target(1) command described in the UNICOS User Commands Reference
Manual.
3.10.1.1 Function Alignment
When the align directive appears in global scope, it must contain a list,
optionally parenthesized, of functions that are to be aligned. Each function in the
list must be defined somewhere in the file. The code generated for a function
that has been specified on a valid, global align directive will be aligned on a
machine instruction buffer boundary.
For function alignment, the align directive appears in global scope and has
the following format:
#pragma _CRI align func...
The following example illustrates the use of the align directive when it is used
in global scope for function alignment:
void mutt(void);
#pragma _CRI align mutt /* Error: mutt is declared
but not defined in this file */
#pragma _CRI align siamese /* Error: siamese not defined in the file */
extern long dachshund;
#pragma _CRI align dachshund /* Error: dachshund is not a function */
void dalmatian(void){}
#pragma _CRI align dalmatian /* OK */
The align directive is especially useful for small functions that fit entirely into
the machines instruction buffers. By using this directive, you can ensure that
such functions are executed entirely within the instruction buffers available on
the machine. After the executable code for the function has been read into the
S217936 87