i960 Processor Compiler User's Guide
2-28
2
this way. When all calls to a given
function are inlined, and the function is
declared static, then the function is
normally not output as assembler code in
its own right.
fint-alias-ptr indicates to the compiler that pointer
objects may be referenced as 32-bit
integers and vice versa.
fint-alias-real indicates to the compiler that float,
double, and long double objects (or
parts thereof) may be referenced as
32-bit integers and vice versa.
fint-alias-short indicates to the compiler that four-byte
integer objects may be referenced as
two-byte objects and vice versa.
The aliasing options listed above tell the compiler not to use certain kinds
of type information when disambiguating memory references, even though
ANSI section 3.3 “Disambiguation Constraints,” allows this.
The rules enforced by the aliasing options are transitive. For example,
when user code accesses parts of
double objects as short, then fint-
alias-real
and fint-alias-short should both be used.
The rules are also applied recursively to
structs and unions. That is to
say, when
fint-alias-ptr is in use, then a union that has a member of
pointer type is assumed to be aliased by 32-bit integers or by
structs or
unions containing 32-bit integers.
Note that ANSI 3.3 requires the compiler to assume that
char references
alias all types, so code using
char pointers is already correct and using
these options is not necessary.
Using all three aliasing options effectively disallows all use of type
information in memory disambiguation. This is bad both for compiler
performance and the efficiency of generated code.