[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Note that the definitions of the macros in this table which are sizes or
alignments measured in bits do not need to be constant. They can be C
expressions that refer to static variables, such as the target_flags
.
See section 21.2 Run-time Target Specification.
BITS_BIG_ENDIAN
This macro does not affect the way structure fields are packed into
bytes or words; that is controlled by BYTES_BIG_ENDIAN
.
BYTES_BIG_ENDIAN
WORDS_BIG_ENDIAN
LIBGCC2_WORDS_BIG_ENDIAN
FLOAT_WORDS_BIG_ENDIAN
DFmode
, XFmode
or
TFmode
floating point numbers are stored in memory with the word
containing the sign bit at the lowest address; otherwise define it to
have the value 0. This macro need not be a constant.
You need not define this macro if the ordering is the same as for multi-word integers.
BITS_PER_UNIT
BITS_PER_WORD
MAX_BITS_PER_WORD
BITS_PER_WORD
. Otherwise, it is the constant value that is the
largest value that BITS_PER_WORD
can have at run-time.
UNITS_PER_WORD
MIN_UNITS_PER_WORD
UNITS_PER_WORD
. Otherwise, it is the constant value that is the
smallest value that UNITS_PER_WORD
can have at run-time.
POINTER_SIZE
Pmode
. If it is not equal to the width of Pmode
,
you must define POINTERS_EXTEND_UNSIGNED
.
POINTERS_EXTEND_UNSIGNED
POINTER_SIZE
bits wide to Pmode
are to
be zero-extended and zero if they are to be sign-extended.
You need not define this macro if the POINTER_SIZE
is equal
to the width of Pmode
.
PROMOTE_MODE (m, unsignedp, type)
On most RISC machines, which only have operations that operate on a full
register, define this macro to set m to word_mode
if
m is an integer mode narrower than BITS_PER_WORD
. In most
cases, only integer modes should be widened because wider-precision
floating-point operations are usually more expensive than their narrower
counterparts.
For most machines, the macro definition does not change unsignedp. However, some machines, have instructions that preferentially handle either signed or unsigned quantities of certain modes. For example, on the DEC Alpha, 32-bit loads from memory and 32-bit add instructions sign-extend the result to 64 bits. On such machines, set unsignedp according to which kind of extension is more efficient.
Do not define this macro if it would never modify m.
PROMOTE_FUNCTION_ARGS
PROMOTE_MODE
should also be done for outgoing function arguments.
PROMOTE_FUNCTION_RETURN
PROMOTE_MODE
should also be done for the return value of functions.
If this macro is defined, FUNCTION_VALUE
must perform the same
promotions done by PROMOTE_MODE
.
PROMOTE_FOR_CALL_ONLY
PROMOTE_MODE
should only be performed for outgoing function arguments or
function return values, as specified by PROMOTE_FUNCTION_ARGS
and PROMOTE_FUNCTION_RETURN
, respectively.
PARM_BOUNDARY
STACK_BOUNDARY
PREFERRED_STACK_BOUNDARY
If PUSH_ROUNDING
is not defined, the stack will always be aligned
to the specified boundary. If PUSH_ROUNDING
is defined and specifies
a less strict alignment than PREFERRED_STACK_BOUNDARY
, the stack may
be momentarily unaligned while pushing arguments.
FUNCTION_BOUNDARY
BIGGEST_ALIGNMENT
MINIMUM_ATOMIC_ALIGNMENT
BITS_PER_UNIT
, but may be larger
on machines that don't have byte or half-word store operations.
BIGGEST_FIELD_ALIGNMENT
BIGGEST_ALIGNMENT
for
structure and union fields only, unless the field alignment has been set
by the __attribute__ ((aligned (n)))
construct.
ADJUST_FIELD_ALIGN (field, computed)
BIGGEST_ALIGNMENT
or
BIGGEST_FIELD_ALIGNMENT
, if defined, for structure fields only.
MAX_OFILE_ALIGNMENT
__attribute__ ((aligned (n)))
construct. If not defined,
the default value is BIGGEST_ALIGNMENT
.
DATA_ALIGNMENT (type, basic-align)
If this macro is not defined, then basic-align is used.
One use of this macro is to increase alignment of medium-size data to
make it all fit in fewer cache lines. Another is to cause character
arrays to be word-aligned so that strcpy
calls that copy
constants to character arrays can be done inline.
CONSTANT_ALIGNMENT (constant, basic-align)
If this macro is not defined, then basic-align is used.
The typical use of this macro is to increase alignment for string
constants to be word aligned so that strcpy
calls that copy
constants can be done inline.
LOCAL_ALIGNMENT (type, basic-align)
If this macro is not defined, then basic-align is used.
One use of this macro is to increase alignment of medium-size data to make it all fit in fewer cache lines.
EMPTY_FIELD_BOUNDARY
int : 0;
.
Note that PCC_BITFIELD_TYPE_MATTERS
also affects the alignment
that results from an empty field.
STRUCTURE_SIZE_BOUNDARY
If you do not define this macro, the default is the same as
BITS_PER_UNIT
.
STRICT_ALIGNMENT
PCC_BITFIELD_TYPE_MATTERS
The behavior is that the type written for a bit-field (int
,
short
, or other integer type) imposes an alignment for the
entire structure, as if the structure really did contain an ordinary
field of that type. In addition, the bit-field is placed within the
structure so that it would fit within such a field, not crossing a
boundary for it.
Thus, on most machines, a bit-field whose type is written as int
would not cross a four-byte boundary, and would force four-byte
alignment for the whole structure. (The alignment used may not be four
bytes; it is controlled by the other alignment parameters.)
If the macro is defined, its definition should be a C expression; a nonzero value for the expression enables this behavior.
Note that if this macro is not defined, or its value is zero, some bit-fields may cross more than one alignment boundary. The compiler can support such references if there are `insv', `extv', and `extzv' insns that can directly reference memory.
The other known way of making bit-fields work is to define
STRUCTURE_SIZE_BOUNDARY
as large as BIGGEST_ALIGNMENT
.
Then every structure can be accessed with fullwords.
Unless the machine has bit-field instructions or you define
STRUCTURE_SIZE_BOUNDARY
that way, you must define
PCC_BITFIELD_TYPE_MATTERS
to have a nonzero value.
If your aim is to make GCC use the same conventions for laying out bit-fields as are used by another compiler, here is how to investigate what the other compiler does. Compile and run this program:
struct foo1 { char x; char :0; char y; }; struct foo2 { char x; int :0; char y; }; main () { printf ("Size of foo1 is %d\n", sizeof (struct foo1)); printf ("Size of foo2 is %d\n", sizeof (struct foo2)); exit (0); } |
If this prints 2 and 5, then the compiler's behavior is what you would
get from PCC_BITFIELD_TYPE_MATTERS
.
BITFIELD_NBYTES_LIMITED
STRUCT_FORCE_BLK (field)
BLKMODE
.
Normally, this is not needed. See the file `c4x.h' for an example of how to use this macro to prevent a structure having a floating point field from being accessed in an integer mode.
ROUND_TYPE_SIZE (type, computed, specified)
The default is to round computed up to a multiple of specified.
ROUND_TYPE_SIZE_UNIT (type, computed, specified)
ROUND_TYPE_SIZE
, but sizes and alignments are
specified in units (bytes). If you define ROUND_TYPE_SIZE
,
you must also define this macro and they must be defined consistently
with each other.
ROUND_TYPE_ALIGN (type, computed, specified)
The default is to use specified if it is larger; otherwise, use
the smaller of computed and BIGGEST_ALIGNMENT
MAX_FIXED_MODE_SIZE
GET_MODE_BITSIZE
(DImode)
is assumed.
VECTOR_MODE_SUPPORTED_P(mode)
STACK_SAVEAREA_MODE (save_level)
enum machine_mode
that
specifies the mode of the save area operand of a
save_stack_level
named pattern (see section 20.8 Standard Pattern Names For Generation).
save_level is one of SAVE_BLOCK
, SAVE_FUNCTION
, or
SAVE_NONLOCAL
and selects which of the three named patterns is
having its mode specified.
You need not define this macro if it always returns Pmode
. You
would most commonly define this macro if the
save_stack_level
patterns need to support both a 32- and a
64-bit mode.
STACK_SIZE_MODE
enum machine_mode
that
specifies the mode of the size increment operand of an
allocate_stack
named pattern (see section 20.8 Standard Pattern Names For Generation).
You need not define this macro if it always returns word_mode
.
You would most commonly define this macro if the allocate_stack
pattern needs to support both a 32- and a 64-bit mode.
CHECK_FLOAT_VALUE (mode, value, overflow)
double
) for mode mode. This means that you check whether
value fits within the possible range of values for mode
mode on this target machine. The mode mode is always
a mode of class MODE_FLOAT
. overflow is nonzero if
the value is already known to be out of range.
If value is not valid or if overflow is nonzero, you should set overflow to 1 and then assign some valid value to value. Allowing an invalid value to go through the compiler can produce incorrect assembler code which may even cause Unix assemblers to crash.
This macro need not be defined if there is no work for it to do.
TARGET_FLOAT_FORMAT
IEEE_FLOAT_FORMAT
VAX_FLOAT_FORMAT
UNKNOWN_FLOAT_FORMAT
The value of this macro is compared with HOST_FLOAT_FORMAT
(see section 22. The Configuration File) to determine whether the target machine has the same
format as the host machine. If any other formats are actually in use on
supported machines, new codes should be defined for them.
The ordering of the component words of floating point values stored in
memory is controlled by FLOAT_WORDS_BIG_ENDIAN
for the target
machine and HOST_FLOAT_WORDS_BIG_ENDIAN
for the host.
DEFAULT_VTABLE_THUNKS
DEFAULT_VTABLE_THUNKS
is 0, GCC uses the traditional
implementation by default. The "thunk" implementation is more efficient
(especially if you have provided an implementation of
ASM_OUTPUT_MI_THUNK
, see 21.8.10 Function Entry and Exit), but is not binary
compatible with code compiled using the traditional implementation.
If you are writing a new port, define DEFAULT_VTABLE_THUNKS
to 1.
If you do not define this macro, the default for `-fvtable-thunk' is 0.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |