|
VMS Help CC, /ASSUME *Conan The Librarian |
/ASSUME=(option[,...])
Controls compiler assumptions. You may select the following
options:
[NO]ACCURACY_SENSITIVE
Specifies whether certain code transformations that affect
floating-point operations are allowed. These changes may or
may not affect the accuracy of the program's results.
If you specify NOACCURACY_SENSITIVE, the compiler is free to
reorder floating-point operations, based on algebraic
identities (inverses, associativity, and distribution). This
allows the compiler to move divide operations outside of
loops, improving performance.
The default, ACCURACY_SENSITIVE, directs the compiler to use
only certain scalar rules for calculations. This setting can
prevent some optimization.
[NO]ALIGNED_OBJECTS
Controls an optimization for dereferencing pointers.
On OpenVMS Alpha systems, dereferencing a pointer to a
longword- or quadword-aligned object is more efficient than
dereferencing a pointer to a byte- or word-aligned object.
Therefore, the compiler can generate more optimized code if
it makes the assumption that a pointer object of an aligned
pointer type does point to an aligned object.
Since the compiler determines the alignment of the
dereferenced object from the type of the pointer, and the
program is allowed to compute a pointer that references an
unaligned object (even though the pointer type indicates that
it references an aligned object), the compiler must assume
that the dereferenced object's alignment matches or exceeds
the alignment indicated by the pointer type.
The default, /ASSUME=ALIGNED_OBJECTS, allows the compiler to
make such an assumption. With this assumption made, the
compiler can generate more efficient code for pointer
dereferences of aligned pointer types.
To prevent the compiler from assuming the pointer type's
alignment for objects that it points to, use the
/ASSUME=NOALIGNED_OBJECTS qualifier.
[NO]CLEAN_PARAMETERS
Controls compiler assumptions about short-integer formal
parameters.
The Alpha Calling Standard requires integers less than 64
bits long that are passed by value to have their upper bits
either zeroed or sign-extended to make full 64-bit values.
These are referred to as clean parameters. Some old code
does not follow this convention. This can cause problems if
the called program assumes that the caller followed the
Calling Standard by passing only clean parameters.
Specifying /ASSUME=NOCLEAN_PARAMETERS allows a program to be
called by old code that might pass unclean integer
parameters. It directs the compiler to generate run-time
code to clean the short integers so they comply with the
Calling Standard.
The default is /ASSUME=CLEAN_PARAMETERS.
[NO]EXACT_CDD_OFFSETS
Controls the alignment of Control Data Dictionary records.
If /ASSUME=EXACT_CDD_OFFSETS is specified, the records input
from the CDD are given the exact alignment (relative to the
start of the record) specified by the CDD definition. This
alignment is independent of the current compiler
member-alignment setting.
If /ASSUME=NOEXACT_CDD_OFFSETS is specified, the compiler may
modify the offsets specified in a CDD record according to the
current member-alignment setting.
The default is /ASSUME=NOEXACT_CDD_OFFSETS.
[NO]HEADER_TYPE_DEFAULT
Specifies whether the default file-type mechanism (.h) for
header files is enabled (HEADER_TYPE_DEFAULT) or disabled
(NOHEADER_TYPE_DEFAULT).
The default is /ASSUME=HEADER_TYPE_DEFAULT.
[NO]MATH_ERRNO
Controls whether or not intrinsic code is generated for math
functions that set the errno variable.
The default is /ASSUME=MATH_ERRNO, which does not allow
intrinsic code for such math functions to be generated, even
if /OPTIMIZE=INTRINSICS is in effect. Their prototypes and
call formats, however, are still checked.
[NO]POINTERS_TO_GLOBALS
Controls whether or not the compiler can safely assume that
global variables have not had their addresses taken in code
that is not visible to the current compilation.
The default, /ASSUME=POINTERS_TO_GLOBALS, assumes that global
variables have had their addresses taken in separately
compiled modules and that, in general, any pointer
dereference could be accessing the same memory as any global
variable. This is often a significant barrier to
optimization.
The /ANSI_ALIAS qualifier allows some resolution based on
data type, but /ASSUME=NOPOINTER_TO_GLOBALS provides
significant additional resolution and improved optimization
in many cases.
[NO]WEAK_VOLATILE
Affects the generation of code for assignments to objects
that are less than or equal to 16 bits in size (for example:
char, short) that have been declared as volatile.
Specifying /ASSUME=WEAK_VOLATILE directs the compiler to
generate code for volatile assignments to single bytes or
words without using the load-locked store-conditional
sequences that, in general, are required to assure volatile
data integrity when direct byte or word memory-access
instructions are not being used.
This option is intended for use in special I/O hardware
access situations, and should not generally be used.
The default is /ASSUME=NOWEAK_VOLATILE, which uses
interlocked instructions for sub-longword volatile accesses
when byte or word instructions are not enabled.
[NO]WHOLE_PROGRAM
Asserts to the compiler that except for "well-behaved library
routines," the whole program consists only of the single
object module being produced by this compilation. The
optimizations enabled by /ASSUME=WHOLE_PROGRAM include all
those enabled by /ASSUME=NOPOINTER_TO_GLOBALS, and possibly
additional optimizations as well.
The default is /ASSUME=NOWHOLE_PROGRAM.
[NO]WRITABLE_STRING_LITERALS
Stores string constants in a writable psect. Otherwise, such
constants will be placed in non-writable psect.
For /STANDARD=VAXC or /STANDARD=COMMON, the default is
/ASSUME=WRITABLE_STRING_LITERALS. For all other compiler
modes, the default is /ASSUME=NOWRITABLE_STRING_LITERALS.
|
|