mirror of
https://github.com/pmret/gcc-papermario.git
synced 2024-11-08 20:02:47 +01:00
1208 lines
50 KiB
Plaintext
1208 lines
50 KiB
Plaintext
|
This is Info file gcc.info, produced by Makeinfo version 1.67 from the
|
|||
|
input file gcc.texi.
|
|||
|
|
|||
|
This file documents the use and the internals of the GNU compiler.
|
|||
|
|
|||
|
Published by the Free Software Foundation 59 Temple Place - Suite 330
|
|||
|
Boston, MA 02111-1307 USA
|
|||
|
|
|||
|
Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
|
|||
|
Free Software Foundation, Inc.
|
|||
|
|
|||
|
Permission is granted to make and distribute verbatim copies of this
|
|||
|
manual provided the copyright notice and this permission notice are
|
|||
|
preserved on all copies.
|
|||
|
|
|||
|
Permission is granted to copy and distribute modified versions of
|
|||
|
this manual under the conditions for verbatim copying, provided also
|
|||
|
that the sections entitled "GNU General Public License," "Funding for
|
|||
|
Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
|
|||
|
included exactly as in the original, and provided that the entire
|
|||
|
resulting derived work is distributed under the terms of a permission
|
|||
|
notice identical to this one.
|
|||
|
|
|||
|
Permission is granted to copy and distribute translations of this
|
|||
|
manual into another language, under the above conditions for modified
|
|||
|
versions, except that the sections entitled "GNU General Public
|
|||
|
License," "Funding for Free Software," and "Protect Your Freedom--Fight
|
|||
|
`Look And Feel'", and this permission notice, may be included in
|
|||
|
translations approved by the Free Software Foundation instead of in the
|
|||
|
original English.
|
|||
|
|
|||
|
|
|||
|
File: gcc.info, Node: Function Units, Prev: Delay Slots, Up: Insn Attributes
|
|||
|
|
|||
|
Specifying Function Units
|
|||
|
-------------------------
|
|||
|
|
|||
|
On most RISC machines, there are instructions whose results are not
|
|||
|
available for a specific number of cycles. Common cases are
|
|||
|
instructions that load data from memory. On many machines, a pipeline
|
|||
|
stall will result if the data is referenced too soon after the load
|
|||
|
instruction.
|
|||
|
|
|||
|
In addition, many newer microprocessors have multiple function
|
|||
|
units, usually one for integer and one for floating point, and often
|
|||
|
will incur pipeline stalls when a result that is needed is not yet
|
|||
|
ready.
|
|||
|
|
|||
|
The descriptions in this section allow the specification of how much
|
|||
|
time must elapse between the execution of an instruction and the time
|
|||
|
when its result is used. It also allows specification of when the
|
|||
|
execution of an instruction will delay execution of similar instructions
|
|||
|
due to function unit conflicts.
|
|||
|
|
|||
|
For the purposes of the specifications in this section, a machine is
|
|||
|
divided into "function units", each of which execute a specific class
|
|||
|
of instructions in first-in-first-out order. Function units that
|
|||
|
accept one instruction each cycle and allow a result to be used in the
|
|||
|
succeeding instruction (usually via forwarding) need not be specified.
|
|||
|
Classic RISC microprocessors will normally have a single function unit,
|
|||
|
which we can call `memory'. The newer "superscalar" processors will
|
|||
|
often have function units for floating point operations, usually at
|
|||
|
least a floating point adder and multiplier.
|
|||
|
|
|||
|
Each usage of a function units by a class of insns is specified with
|
|||
|
a `define_function_unit' expression, which looks like this:
|
|||
|
|
|||
|
(define_function_unit NAME MULTIPLICITY SIMULTANEITY
|
|||
|
TEST READY-DELAY ISSUE-DELAY
|
|||
|
[CONFLICT-LIST])
|
|||
|
|
|||
|
NAME is a string giving the name of the function unit.
|
|||
|
|
|||
|
MULTIPLICITY is an integer specifying the number of identical units
|
|||
|
in the processor. If more than one unit is specified, they will be
|
|||
|
scheduled independently. Only truly independent units should be
|
|||
|
counted; a pipelined unit should be specified as a single unit. (The
|
|||
|
only common example of a machine that has multiple function units for a
|
|||
|
single instruction class that are truly independent and not pipelined
|
|||
|
are the two multiply and two increment units of the CDC 6600.)
|
|||
|
|
|||
|
SIMULTANEITY specifies the maximum number of insns that can be
|
|||
|
executing in each instance of the function unit simultaneously or zero
|
|||
|
if the unit is pipelined and has no limit.
|
|||
|
|
|||
|
All `define_function_unit' definitions referring to function unit
|
|||
|
NAME must have the same name and values for MULTIPLICITY and
|
|||
|
SIMULTANEITY.
|
|||
|
|
|||
|
TEST is an attribute test that selects the insns we are describing
|
|||
|
in this definition. Note that an insn may use more than one function
|
|||
|
unit and a function unit may be specified in more than one
|
|||
|
`define_function_unit'.
|
|||
|
|
|||
|
READY-DELAY is an integer that specifies the number of cycles after
|
|||
|
which the result of the instruction can be used without introducing any
|
|||
|
stalls.
|
|||
|
|
|||
|
ISSUE-DELAY is an integer that specifies the number of cycles after
|
|||
|
the instruction matching the TEST expression begins using this unit
|
|||
|
until a subsequent instruction can begin. A cost of N indicates an N-1
|
|||
|
cycle delay. A subsequent instruction may also be delayed if an
|
|||
|
earlier instruction has a longer READY-DELAY value. This blocking
|
|||
|
effect is computed using the SIMULTANEITY, READY-DELAY, ISSUE-DELAY,
|
|||
|
and CONFLICT-LIST terms. For a normal non-pipelined function unit,
|
|||
|
SIMULTANEITY is one, the unit is taken to block for the READY-DELAY
|
|||
|
cycles of the executing insn, and smaller values of ISSUE-DELAY are
|
|||
|
ignored.
|
|||
|
|
|||
|
CONFLICT-LIST is an optional list giving detailed conflict costs for
|
|||
|
this unit. If specified, it is a list of condition test expressions to
|
|||
|
be applied to insns chosen to execute in NAME following the particular
|
|||
|
insn matching TEST that is already executing in NAME. For each insn in
|
|||
|
the list, ISSUE-DELAY specifies the conflict cost; for insns not in the
|
|||
|
list, the cost is zero. If not specified, CONFLICT-LIST defaults to
|
|||
|
all instructions that use the function unit.
|
|||
|
|
|||
|
Typical uses of this vector are where a floating point function unit
|
|||
|
can pipeline either single- or double-precision operations, but not
|
|||
|
both, or where a memory unit can pipeline loads, but not stores, etc.
|
|||
|
|
|||
|
As an example, consider a classic RISC machine where the result of a
|
|||
|
load instruction is not available for two cycles (a single "delay"
|
|||
|
instruction is required) and where only one load instruction can be
|
|||
|
executed simultaneously. This would be specified as:
|
|||
|
|
|||
|
(define_function_unit "memory" 1 1 (eq_attr "type" "load") 2 0)
|
|||
|
|
|||
|
For the case of a floating point function unit that can pipeline
|
|||
|
either single or double precision, but not both, the following could be
|
|||
|
specified:
|
|||
|
|
|||
|
(define_function_unit
|
|||
|
"fp" 1 0 (eq_attr "type" "sp_fp") 4 4 [(eq_attr "type" "dp_fp")])
|
|||
|
(define_function_unit
|
|||
|
"fp" 1 0 (eq_attr "type" "dp_fp") 4 4 [(eq_attr "type" "sp_fp")])
|
|||
|
|
|||
|
*Note:* The scheduler attempts to avoid function unit conflicts and
|
|||
|
uses all the specifications in the `define_function_unit' expression.
|
|||
|
It has recently come to our attention that these specifications may not
|
|||
|
allow modeling of some of the newer "superscalar" processors that have
|
|||
|
insns using multiple pipelined units. These insns will cause a
|
|||
|
potential conflict for the second unit used during their execution and
|
|||
|
there is no way of representing that conflict. We welcome any examples
|
|||
|
of how function unit conflicts work in such processors and suggestions
|
|||
|
for their representation.
|
|||
|
|
|||
|
|
|||
|
File: gcc.info, Node: Target Macros, Next: Config, Prev: Machine Desc, Up: Top
|
|||
|
|
|||
|
Target Description Macros
|
|||
|
*************************
|
|||
|
|
|||
|
In addition to the file `MACHINE.md', a machine description includes
|
|||
|
a C header file conventionally given the name `MACHINE.h'. This header
|
|||
|
file defines numerous macros that convey the information about the
|
|||
|
target machine that does not fit into the scheme of the `.md' file.
|
|||
|
The file `tm.h' should be a link to `MACHINE.h'. The header file
|
|||
|
`config.h' includes `tm.h' and most compiler source files include
|
|||
|
`config.h'.
|
|||
|
|
|||
|
* Menu:
|
|||
|
|
|||
|
* Driver:: Controlling how the driver runs the compilation passes.
|
|||
|
* Run-time Target:: Defining `-m' options like `-m68000' and `-m68020'.
|
|||
|
* Storage Layout:: Defining sizes and alignments of data.
|
|||
|
* Type Layout:: Defining sizes and properties of basic user data types.
|
|||
|
* Registers:: Naming and describing the hardware registers.
|
|||
|
* Register Classes:: Defining the classes of hardware registers.
|
|||
|
* Stack and Calling:: Defining which way the stack grows and by how much.
|
|||
|
* Varargs:: Defining the varargs macros.
|
|||
|
* Trampolines:: Code set up at run time to enter a nested function.
|
|||
|
* Library Calls:: Controlling how library routines are implicitly called.
|
|||
|
* Addressing Modes:: Defining addressing modes valid for memory operands.
|
|||
|
* Condition Code:: Defining how insns update the condition code.
|
|||
|
* Costs:: Defining relative costs of different operations.
|
|||
|
* Sections:: Dividing storage into text, data, and other sections.
|
|||
|
* PIC:: Macros for position independent code.
|
|||
|
* Assembler Format:: Defining how to write insns and pseudo-ops to output.
|
|||
|
* Debugging Info:: Defining the format of debugging output.
|
|||
|
* Cross-compilation:: Handling floating point for cross-compilers.
|
|||
|
* Misc:: Everything else.
|
|||
|
|
|||
|
|
|||
|
File: gcc.info, Node: Driver, Next: Run-time Target, Up: Target Macros
|
|||
|
|
|||
|
Controlling the Compilation Driver, `gcc'
|
|||
|
=========================================
|
|||
|
|
|||
|
You can control the compilation driver.
|
|||
|
|
|||
|
`SWITCH_TAKES_ARG (CHAR)'
|
|||
|
A C expression which determines whether the option `-CHAR' takes
|
|||
|
arguments. The value should be the number of arguments that
|
|||
|
option takes-zero, for many options.
|
|||
|
|
|||
|
By default, this macro is defined as `DEFAULT_SWITCH_TAKES_ARG',
|
|||
|
which handles the standard options properly. You need not define
|
|||
|
`SWITCH_TAKES_ARG' unless you wish to add additional options which
|
|||
|
take arguments. Any redefinition should call
|
|||
|
`DEFAULT_SWITCH_TAKES_ARG' and then check for additional options.
|
|||
|
|
|||
|
`WORD_SWITCH_TAKES_ARG (NAME)'
|
|||
|
A C expression which determines whether the option `-NAME' takes
|
|||
|
arguments. The value should be the number of arguments that
|
|||
|
option takes-zero, for many options. This macro rather than
|
|||
|
`SWITCH_TAKES_ARG' is used for multi-character option names.
|
|||
|
|
|||
|
By default, this macro is defined as
|
|||
|
`DEFAULT_WORD_SWITCH_TAKES_ARG', which handles the standard options
|
|||
|
properly. You need not define `WORD_SWITCH_TAKES_ARG' unless you
|
|||
|
wish to add additional options which take arguments. Any
|
|||
|
redefinition should call `DEFAULT_WORD_SWITCH_TAKES_ARG' and then
|
|||
|
check for additional options.
|
|||
|
|
|||
|
`SWITCHES_NEED_SPACES'
|
|||
|
A string-valued C expression which enumerates the options for which
|
|||
|
the linker needs a space between the option and its argument.
|
|||
|
|
|||
|
If this macro is not defined, the default value is `""'.
|
|||
|
|
|||
|
`CPP_SPEC'
|
|||
|
A C string constant that tells the GNU CC driver program options to
|
|||
|
pass to CPP. It can also specify how to translate options you
|
|||
|
give to GNU CC into options for GNU CC to pass to the CPP.
|
|||
|
|
|||
|
Do not define this macro if it does not need to do anything.
|
|||
|
|
|||
|
`NO_BUILTIN_SIZE_TYPE'
|
|||
|
If this macro is defined, the preprocessor will not define the
|
|||
|
builtin macro `__SIZE_TYPE__'. The macro `__SIZE_TYPE__' must
|
|||
|
then be defined by `CPP_SPEC' instead.
|
|||
|
|
|||
|
This should be defined if `SIZE_TYPE' depends on target dependent
|
|||
|
flags which are not accessible to the preprocessor. Otherwise, it
|
|||
|
should not be defined.
|
|||
|
|
|||
|
`NO_BUILTIN_PTRDIFF_TYPE'
|
|||
|
If this macro is defined, the preprocessor will not define the
|
|||
|
builtin macro `__PTRDIFF_TYPE__'. The macro `__PTRDIFF_TYPE__'
|
|||
|
must then be defined by `CPP_SPEC' instead.
|
|||
|
|
|||
|
This should be defined if `PTRDIFF_TYPE' depends on target
|
|||
|
dependent flags which are not accessible to the preprocessor.
|
|||
|
Otherwise, it should not be defined.
|
|||
|
|
|||
|
`SIGNED_CHAR_SPEC'
|
|||
|
A C string constant that tells the GNU CC driver program options to
|
|||
|
pass to CPP. By default, this macro is defined to pass the option
|
|||
|
`-D__CHAR_UNSIGNED__' to CPP if `char' will be treated as
|
|||
|
`unsigned char' by `cc1'.
|
|||
|
|
|||
|
Do not define this macro unless you need to override the default
|
|||
|
definition.
|
|||
|
|
|||
|
`CC1_SPEC'
|
|||
|
A C string constant that tells the GNU CC driver program options to
|
|||
|
pass to `cc1'. It can also specify how to translate options you
|
|||
|
give to GNU CC into options for GNU CC to pass to the `cc1'.
|
|||
|
|
|||
|
Do not define this macro if it does not need to do anything.
|
|||
|
|
|||
|
`CC1PLUS_SPEC'
|
|||
|
A C string constant that tells the GNU CC driver program options to
|
|||
|
pass to `cc1plus'. It can also specify how to translate options
|
|||
|
you give to GNU CC into options for GNU CC to pass to the
|
|||
|
`cc1plus'.
|
|||
|
|
|||
|
Do not define this macro if it does not need to do anything.
|
|||
|
|
|||
|
`ASM_SPEC'
|
|||
|
A C string constant that tells the GNU CC driver program options to
|
|||
|
pass to the assembler. It can also specify how to translate
|
|||
|
options you give to GNU CC into options for GNU CC to pass to the
|
|||
|
assembler. See the file `sun3.h' for an example of this.
|
|||
|
|
|||
|
Do not define this macro if it does not need to do anything.
|
|||
|
|
|||
|
`ASM_FINAL_SPEC'
|
|||
|
A C string constant that tells the GNU CC driver program how to
|
|||
|
run any programs which cleanup after the normal assembler.
|
|||
|
Normally, this is not needed. See the file `mips.h' for an
|
|||
|
example of this.
|
|||
|
|
|||
|
Do not define this macro if it does not need to do anything.
|
|||
|
|
|||
|
`LINK_SPEC'
|
|||
|
A C string constant that tells the GNU CC driver program options to
|
|||
|
pass to the linker. It can also specify how to translate options
|
|||
|
you give to GNU CC into options for GNU CC to pass to the linker.
|
|||
|
|
|||
|
Do not define this macro if it does not need to do anything.
|
|||
|
|
|||
|
`LIB_SPEC'
|
|||
|
Another C string constant used much like `LINK_SPEC'. The
|
|||
|
difference between the two is that `LIB_SPEC' is used at the end
|
|||
|
of the command given to the linker.
|
|||
|
|
|||
|
If this macro is not defined, a default is provided that loads the
|
|||
|
standard C library from the usual place. See `gcc.c'.
|
|||
|
|
|||
|
`LIBGCC_SPEC'
|
|||
|
Another C string constant that tells the GNU CC driver program how
|
|||
|
and when to place a reference to `libgcc.a' into the linker
|
|||
|
command line. This constant is placed both before and after the
|
|||
|
value of `LIB_SPEC'.
|
|||
|
|
|||
|
If this macro is not defined, the GNU CC driver provides a default
|
|||
|
that passes the string `-lgcc' to the linker unless the `-shared'
|
|||
|
option is specified.
|
|||
|
|
|||
|
`STARTFILE_SPEC'
|
|||
|
Another C string constant used much like `LINK_SPEC'. The
|
|||
|
difference between the two is that `STARTFILE_SPEC' is used at the
|
|||
|
very beginning of the command given to the linker.
|
|||
|
|
|||
|
If this macro is not defined, a default is provided that loads the
|
|||
|
standard C startup file from the usual place. See `gcc.c'.
|
|||
|
|
|||
|
`ENDFILE_SPEC'
|
|||
|
Another C string constant used much like `LINK_SPEC'. The
|
|||
|
difference between the two is that `ENDFILE_SPEC' is used at the
|
|||
|
very end of the command given to the linker.
|
|||
|
|
|||
|
Do not define this macro if it does not need to do anything.
|
|||
|
|
|||
|
`EXTRA_SPECS'
|
|||
|
Define this macro to provide additional specifications to put in
|
|||
|
the `specs' file that can be used in various specifications like
|
|||
|
`CC1_SPEC'.
|
|||
|
|
|||
|
The definition should be an initializer for an array of structures,
|
|||
|
containing a string constant, that defines the specification name,
|
|||
|
and a string constant that provides the specification.
|
|||
|
|
|||
|
Do not define this macro if it does not need to do anything.
|
|||
|
|
|||
|
`EXTRA_SPECS' is useful when an architecture contains several
|
|||
|
related targets, which have various `..._SPECS' which are similar
|
|||
|
to each other, and the maintainer would like one central place to
|
|||
|
keep these definitions.
|
|||
|
|
|||
|
For example, the PowerPC System V.4 targets use `EXTRA_SPECS' to
|
|||
|
define either `_CALL_SYSV' when the System V calling sequence is
|
|||
|
used or `_CALL_AIX' when the older AIX-based calling sequence is
|
|||
|
used.
|
|||
|
|
|||
|
The `config/rs6000/rs6000.h' target file defines:
|
|||
|
|
|||
|
#define EXTRA_SPECS \
|
|||
|
{ "cpp_sysv_default", CPP_SYSV_DEFAULT },
|
|||
|
|
|||
|
#define CPP_SYS_DEFAULT ""
|
|||
|
|
|||
|
The `config/rs6000/sysv.h' target file defines:
|
|||
|
#undef CPP_SPEC
|
|||
|
#define CPP_SPEC \
|
|||
|
"%{posix: -D_POSIX_SOURCE } \
|
|||
|
%{mcall-sysv: -D_CALL_SYSV } %{mcall-aix: -D_CALL_AIX } \
|
|||
|
%{!mcall-sysv: %{!mcall-aix: %(cpp_sysv_default) }} \
|
|||
|
%{msoft-float: -D_SOFT_FLOAT} %{mcpu=403: -D_SOFT_FLOAT}"
|
|||
|
|
|||
|
#undef CPP_SYSV_DEFAULT
|
|||
|
#define CPP_SYSV_DEFAULT "-D_CALL_SYSV"
|
|||
|
|
|||
|
while the `config/rs6000/eabiaix.h' target file defines
|
|||
|
`CPP_SYSV_DEFAULT' as:
|
|||
|
|
|||
|
#undef CPP_SYSV_DEFAULT
|
|||
|
#define CPP_SYSV_DEFAULT "-D_CALL_AIX"
|
|||
|
|
|||
|
`LINK_LIBGCC_SPECIAL'
|
|||
|
Define this macro if the driver program should find the library
|
|||
|
`libgcc.a' itself and should not pass `-L' options to the linker.
|
|||
|
If you do not define this macro, the driver program will pass the
|
|||
|
argument `-lgcc' to tell the linker to do the search and will pass
|
|||
|
`-L' options to it.
|
|||
|
|
|||
|
`LINK_LIBGCC_SPECIAL_1'
|
|||
|
Define this macro if the driver program should find the library
|
|||
|
`libgcc.a'. If you do not define this macro, the driver program
|
|||
|
will pass the argument `-lgcc' to tell the linker to do the search.
|
|||
|
This macro is similar to `LINK_LIBGCC_SPECIAL', except that it does
|
|||
|
not affect `-L' options.
|
|||
|
|
|||
|
`MULTILIB_DEFAULTS'
|
|||
|
Define this macro as a C expression for the initializer of an
|
|||
|
array of string to tell the driver program which options are
|
|||
|
defaults for this target and thus do not need to be handled
|
|||
|
specially when using `MULTILIB_OPTIONS'.
|
|||
|
|
|||
|
Do not define this macro if `MULTILIB_OPTIONS' is not defined in
|
|||
|
the target makefile fragment or if none of the options listed in
|
|||
|
`MULTILIB_OPTIONS' are set by default. *Note Target Fragment::.
|
|||
|
|
|||
|
`RELATIVE_PREFIX_NOT_LINKDIR'
|
|||
|
Define this macro to tell `gcc' that it should only translate a
|
|||
|
`-B' prefix into a `-L' linker option if the prefix indicates an
|
|||
|
absolute file name.
|
|||
|
|
|||
|
`STANDARD_EXEC_PREFIX'
|
|||
|
Define this macro as a C string constant if you wish to override
|
|||
|
the standard choice of `/usr/local/lib/gcc-lib/' as the default
|
|||
|
prefix to try when searching for the executable files of the
|
|||
|
compiler.
|
|||
|
|
|||
|
`MD_EXEC_PREFIX'
|
|||
|
If defined, this macro is an additional prefix to try after
|
|||
|
`STANDARD_EXEC_PREFIX'. `MD_EXEC_PREFIX' is not searched when the
|
|||
|
`-b' option is used, or the compiler is built as a cross compiler.
|
|||
|
|
|||
|
`STANDARD_STARTFILE_PREFIX'
|
|||
|
Define this macro as a C string constant if you wish to override
|
|||
|
the standard choice of `/usr/local/lib/' as the default prefix to
|
|||
|
try when searching for startup files such as `crt0.o'.
|
|||
|
|
|||
|
`MD_STARTFILE_PREFIX'
|
|||
|
If defined, this macro supplies an additional prefix to try after
|
|||
|
the standard prefixes. `MD_EXEC_PREFIX' is not searched when the
|
|||
|
`-b' option is used, or when the compiler is built as a cross
|
|||
|
compiler.
|
|||
|
|
|||
|
`MD_STARTFILE_PREFIX_1'
|
|||
|
If defined, this macro supplies yet another prefix to try after the
|
|||
|
standard prefixes. It is not searched when the `-b' option is
|
|||
|
used, or when the compiler is built as a cross compiler.
|
|||
|
|
|||
|
`INIT_ENVIRONMENT'
|
|||
|
Define this macro as a C string constant if you wish to set
|
|||
|
environment variables for programs called by the driver, such as
|
|||
|
the assembler and loader. The driver passes the value of this
|
|||
|
macro to `putenv' to initialize the necessary environment
|
|||
|
variables.
|
|||
|
|
|||
|
`LOCAL_INCLUDE_DIR'
|
|||
|
Define this macro as a C string constant if you wish to override
|
|||
|
the standard choice of `/usr/local/include' as the default prefix
|
|||
|
to try when searching for local header files. `LOCAL_INCLUDE_DIR'
|
|||
|
comes before `SYSTEM_INCLUDE_DIR' in the search order.
|
|||
|
|
|||
|
Cross compilers do not use this macro and do not search either
|
|||
|
`/usr/local/include' or its replacement.
|
|||
|
|
|||
|
`SYSTEM_INCLUDE_DIR'
|
|||
|
Define this macro as a C string constant if you wish to specify a
|
|||
|
system-specific directory to search for header files before the
|
|||
|
standard directory. `SYSTEM_INCLUDE_DIR' comes before
|
|||
|
`STANDARD_INCLUDE_DIR' in the search order.
|
|||
|
|
|||
|
Cross compilers do not use this macro and do not search the
|
|||
|
directory specified.
|
|||
|
|
|||
|
`STANDARD_INCLUDE_DIR'
|
|||
|
Define this macro as a C string constant if you wish to override
|
|||
|
the standard choice of `/usr/include' as the default prefix to try
|
|||
|
when searching for header files.
|
|||
|
|
|||
|
Cross compilers do not use this macro and do not search either
|
|||
|
`/usr/include' or its replacement.
|
|||
|
|
|||
|
`STANDARD_INCLUDE_COMPONENT'
|
|||
|
The "component" corresponding to `STANDARD_INCLUDE_DIR'. See
|
|||
|
`INCLUDE_DEFAULTS', below, for the description of components. If
|
|||
|
you do not define this macro, no component is used.
|
|||
|
|
|||
|
`INCLUDE_DEFAULTS'
|
|||
|
Define this macro if you wish to override the entire default
|
|||
|
search path for include files. For a native compiler, the default
|
|||
|
search path usually consists of `GCC_INCLUDE_DIR',
|
|||
|
`LOCAL_INCLUDE_DIR', `SYSTEM_INCLUDE_DIR',
|
|||
|
`GPLUSPLUS_INCLUDE_DIR', and `STANDARD_INCLUDE_DIR'. In addition,
|
|||
|
`GPLUSPLUS_INCLUDE_DIR' and `GCC_INCLUDE_DIR' are defined
|
|||
|
automatically by `Makefile', and specify private search areas for
|
|||
|
GCC. The directory `GPLUSPLUS_INCLUDE_DIR' is used only for C++
|
|||
|
programs.
|
|||
|
|
|||
|
The definition should be an initializer for an array of structures.
|
|||
|
Each array element should have four elements: the directory name (a
|
|||
|
string constant), the component name, and flag for C++-only
|
|||
|
directories, and a flag showing that the includes in the directory
|
|||
|
don't need to be wrapped in `extern `C'' when compiling C++. Mark
|
|||
|
the end of the array with a null element.
|
|||
|
|
|||
|
The component name denotes what GNU package the include file is
|
|||
|
part of, if any, in all upper-case letters. For example, it might
|
|||
|
be `GCC' or `BINUTILS'. If the package is part of the a
|
|||
|
vendor-supplied operating system, code the component name as `0'.
|
|||
|
|
|||
|
For example, here is the definition used for VAX/VMS:
|
|||
|
|
|||
|
#define INCLUDE_DEFAULTS \
|
|||
|
{ \
|
|||
|
{ "GNU_GXX_INCLUDE:", "G++", 1, 1}, \
|
|||
|
{ "GNU_CC_INCLUDE:", "GCC", 0, 0}, \
|
|||
|
{ "SYS$SYSROOT:[SYSLIB.]", 0, 0, 0}, \
|
|||
|
{ ".", 0, 0, 0}, \
|
|||
|
{ 0, 0, 0, 0} \
|
|||
|
}
|
|||
|
|
|||
|
Here is the order of prefixes tried for exec files:
|
|||
|
|
|||
|
1. Any prefixes specified by the user with `-B'.
|
|||
|
|
|||
|
2. The environment variable `GCC_EXEC_PREFIX', if any.
|
|||
|
|
|||
|
3. The directories specified by the environment variable
|
|||
|
`COMPILER_PATH'.
|
|||
|
|
|||
|
4. The macro `STANDARD_EXEC_PREFIX'.
|
|||
|
|
|||
|
5. `/usr/lib/gcc/'.
|
|||
|
|
|||
|
6. The macro `MD_EXEC_PREFIX', if any.
|
|||
|
|
|||
|
Here is the order of prefixes tried for startfiles:
|
|||
|
|
|||
|
1. Any prefixes specified by the user with `-B'.
|
|||
|
|
|||
|
2. The environment variable `GCC_EXEC_PREFIX', if any.
|
|||
|
|
|||
|
3. The directories specified by the environment variable
|
|||
|
`LIBRARY_PATH' (native only, cross compilers do not use this).
|
|||
|
|
|||
|
4. The macro `STANDARD_EXEC_PREFIX'.
|
|||
|
|
|||
|
5. `/usr/lib/gcc/'.
|
|||
|
|
|||
|
6. The macro `MD_EXEC_PREFIX', if any.
|
|||
|
|
|||
|
7. The macro `MD_STARTFILE_PREFIX', if any.
|
|||
|
|
|||
|
8. The macro `STANDARD_STARTFILE_PREFIX'.
|
|||
|
|
|||
|
9. `/lib/'.
|
|||
|
|
|||
|
10. `/usr/lib/'.
|
|||
|
|
|||
|
|
|||
|
File: gcc.info, Node: Run-time Target, Next: Storage Layout, Prev: Driver, Up: Target Macros
|
|||
|
|
|||
|
Run-time Target Specification
|
|||
|
=============================
|
|||
|
|
|||
|
Here are run-time target specifications.
|
|||
|
|
|||
|
`CPP_PREDEFINES'
|
|||
|
Define this to be a string constant containing `-D' options to
|
|||
|
define the predefined macros that identify this machine and system.
|
|||
|
These macros will be predefined unless the `-ansi' option is
|
|||
|
specified.
|
|||
|
|
|||
|
In addition, a parallel set of macros are predefined, whose names
|
|||
|
are made by appending `__' at the beginning and at the end. These
|
|||
|
`__' macros are permitted by the ANSI standard, so they are
|
|||
|
predefined regardless of whether `-ansi' is specified.
|
|||
|
|
|||
|
For example, on the Sun, one can use the following value:
|
|||
|
|
|||
|
"-Dmc68000 -Dsun -Dunix"
|
|||
|
|
|||
|
The result is to define the macros `__mc68000__', `__sun__' and
|
|||
|
`__unix__' unconditionally, and the macros `mc68000', `sun' and
|
|||
|
`unix' provided `-ansi' is not specified.
|
|||
|
|
|||
|
`extern int target_flags;'
|
|||
|
This declaration should be present.
|
|||
|
|
|||
|
`TARGET_...'
|
|||
|
This series of macros is to allow compiler command arguments to
|
|||
|
enable or disable the use of optional features of the target
|
|||
|
machine. For example, one machine description serves both the
|
|||
|
68000 and the 68020; a command argument tells the compiler whether
|
|||
|
it should use 68020-only instructions or not. This command
|
|||
|
argument works by means of a macro `TARGET_68020' that tests a bit
|
|||
|
in `target_flags'.
|
|||
|
|
|||
|
Define a macro `TARGET_FEATURENAME' for each such option. Its
|
|||
|
definition should test a bit in `target_flags'; for example:
|
|||
|
|
|||
|
#define TARGET_68020 (target_flags & 1)
|
|||
|
|
|||
|
One place where these macros are used is in the
|
|||
|
condition-expressions of instruction patterns. Note how
|
|||
|
`TARGET_68020' appears frequently in the 68000 machine description
|
|||
|
file, `m68k.md'. Another place they are used is in the
|
|||
|
definitions of the other macros in the `MACHINE.h' file.
|
|||
|
|
|||
|
`TARGET_SWITCHES'
|
|||
|
This macro defines names of command options to set and clear bits
|
|||
|
in `target_flags'. Its definition is an initializer with a
|
|||
|
subgrouping for each command option.
|
|||
|
|
|||
|
Each subgrouping contains a string constant, that defines the
|
|||
|
option name, and a number, which contains the bits to set in
|
|||
|
`target_flags'. A negative number says to clear bits instead; the
|
|||
|
negative of the number is which bits to clear. The actual option
|
|||
|
name is made by appending `-m' to the specified name.
|
|||
|
|
|||
|
One of the subgroupings should have a null string. The number in
|
|||
|
this grouping is the default value for `target_flags'. Any target
|
|||
|
options act starting with that value.
|
|||
|
|
|||
|
Here is an example which defines `-m68000' and `-m68020' with
|
|||
|
opposite meanings, and picks the latter as the default:
|
|||
|
|
|||
|
#define TARGET_SWITCHES \
|
|||
|
{ { "68020", 1}, \
|
|||
|
{ "68000", -1}, \
|
|||
|
{ "", 1}}
|
|||
|
|
|||
|
`TARGET_OPTIONS'
|
|||
|
This macro is similar to `TARGET_SWITCHES' but defines names of
|
|||
|
command options that have values. Its definition is an
|
|||
|
initializer with a subgrouping for each command option.
|
|||
|
|
|||
|
Each subgrouping contains a string constant, that defines the
|
|||
|
fixed part of the option name, and the address of a variable. The
|
|||
|
variable, type `char *', is set to the variable part of the given
|
|||
|
option if the fixed part matches. The actual option name is made
|
|||
|
by appending `-m' to the specified name.
|
|||
|
|
|||
|
Here is an example which defines `-mshort-data-NUMBER'. If the
|
|||
|
given option is `-mshort-data-512', the variable `m88k_short_data'
|
|||
|
will be set to the string `"512"'.
|
|||
|
|
|||
|
extern char *m88k_short_data;
|
|||
|
#define TARGET_OPTIONS \
|
|||
|
{ { "short-data-", &m88k_short_data } }
|
|||
|
|
|||
|
`TARGET_VERSION'
|
|||
|
This macro is a C statement to print on `stderr' a string
|
|||
|
describing the particular machine description choice. Every
|
|||
|
machine description should define `TARGET_VERSION'. For example:
|
|||
|
|
|||
|
#ifdef MOTOROLA
|
|||
|
#define TARGET_VERSION \
|
|||
|
fprintf (stderr, " (68k, Motorola syntax)");
|
|||
|
#else
|
|||
|
#define TARGET_VERSION \
|
|||
|
fprintf (stderr, " (68k, MIT syntax)");
|
|||
|
#endif
|
|||
|
|
|||
|
`OVERRIDE_OPTIONS'
|
|||
|
Sometimes certain combinations of command options do not make
|
|||
|
sense on a particular target machine. You can define a macro
|
|||
|
`OVERRIDE_OPTIONS' to take account of this. This macro, if
|
|||
|
defined, is executed once just after all the command options have
|
|||
|
been parsed.
|
|||
|
|
|||
|
Don't use this macro to turn on various extra optimizations for
|
|||
|
`-O'. That is what `OPTIMIZATION_OPTIONS' is for.
|
|||
|
|
|||
|
`OPTIMIZATION_OPTIONS (LEVEL)'
|
|||
|
Some machines may desire to change what optimizations are
|
|||
|
performed for various optimization levels. This macro, if
|
|||
|
defined, is executed once just after the optimization level is
|
|||
|
determined and before the remainder of the command options have
|
|||
|
been parsed. Values set in this macro are used as the default
|
|||
|
values for the other command line options.
|
|||
|
|
|||
|
LEVEL is the optimization level specified; 2 if `-O2' is
|
|||
|
specified, 1 if `-O' is specified, and 0 if neither is specified.
|
|||
|
|
|||
|
You should not use this macro to change options that are not
|
|||
|
machine-specific. These should uniformly selected by the same
|
|||
|
optimization level on all supported machines. Use this macro to
|
|||
|
enable machine-specific optimizations.
|
|||
|
|
|||
|
*Do not examine `write_symbols' in this macro!* The debugging
|
|||
|
options are not supposed to alter the generated code.
|
|||
|
|
|||
|
`CAN_DEBUG_WITHOUT_FP'
|
|||
|
Define this macro if debugging can be performed even without a
|
|||
|
frame pointer. If this macro is defined, GNU CC will turn on the
|
|||
|
`-fomit-frame-pointer' option whenever `-O' is specified.
|
|||
|
|
|||
|
|
|||
|
File: gcc.info, Node: Storage Layout, Next: Type Layout, Prev: Run-time Target, Up: Target Macros
|
|||
|
|
|||
|
Storage Layout
|
|||
|
==============
|
|||
|
|
|||
|
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'. *Note Run-time Target::.
|
|||
|
|
|||
|
`BITS_BIG_ENDIAN'
|
|||
|
Define this macro to have the value 1 if the most significant bit
|
|||
|
in a byte has the lowest number; otherwise define it to have the
|
|||
|
value zero. This means that bit-field instructions count from the
|
|||
|
most significant bit. If the machine has no bit-field
|
|||
|
instructions, then this must still be defined, but it doesn't
|
|||
|
matter which value it is defined to. This macro need not be a
|
|||
|
constant.
|
|||
|
|
|||
|
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'
|
|||
|
Define this macro to have the value 1 if the most significant byte
|
|||
|
in a word has the lowest number. This macro need not be a
|
|||
|
constant.
|
|||
|
|
|||
|
`WORDS_BIG_ENDIAN'
|
|||
|
Define this macro to have the value 1 if, in a multiword object,
|
|||
|
the most significant word has the lowest number. This applies to
|
|||
|
both memory locations and registers; GNU CC fundamentally assumes
|
|||
|
that the order of words in memory is the same as the order in
|
|||
|
registers. This macro need not be a constant.
|
|||
|
|
|||
|
`LIBGCC2_WORDS_BIG_ENDIAN'
|
|||
|
Define this macro if WORDS_BIG_ENDIAN is not constant. This must
|
|||
|
be a constant value with the same meaning as WORDS_BIG_ENDIAN,
|
|||
|
which will be used only when compiling libgcc2.c. Typically the
|
|||
|
value will be set based on preprocessor defines.
|
|||
|
|
|||
|
`FLOAT_WORDS_BIG_ENDIAN'
|
|||
|
Define this macro to have the value 1 if `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'
|
|||
|
Define this macro to be the number of bits in an addressable
|
|||
|
storage unit (byte); normally 8.
|
|||
|
|
|||
|
`BITS_PER_WORD'
|
|||
|
Number of bits in a word; normally 32.
|
|||
|
|
|||
|
`MAX_BITS_PER_WORD'
|
|||
|
Maximum number of bits in a word. If this is undefined, the
|
|||
|
default is `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'
|
|||
|
Number of storage units in a word; normally 4.
|
|||
|
|
|||
|
`MIN_UNITS_PER_WORD'
|
|||
|
Minimum number of units in a word. If this is undefined, the
|
|||
|
default is `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'
|
|||
|
Width of a pointer, in bits. You must specify a value no wider
|
|||
|
than the width of `Pmode'. If it is not equal to the width of
|
|||
|
`Pmode', you must define `POINTERS_EXTEND_UNSIGNED'.
|
|||
|
|
|||
|
`POINTERS_EXTEND_UNSIGNED'
|
|||
|
A C expression whose value is nonzero if pointers that need to be
|
|||
|
extended from being `POINTER_SIZE' bits wide to `Pmode' are
|
|||
|
sign-extended and zero if they are zero-extended.
|
|||
|
|
|||
|
You need not define this macro if the `POINTER_SIZE' is equal to
|
|||
|
the width of `Pmode'.
|
|||
|
|
|||
|
`PROMOTE_MODE (M, UNSIGNEDP, TYPE)'
|
|||
|
A macro to update M and UNSIGNEDP when an object whose type is
|
|||
|
TYPE and which has the specified mode and signedness is to be
|
|||
|
stored in a register. This macro is only called when TYPE is a
|
|||
|
scalar 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'
|
|||
|
Define this macro if the promotion described by `PROMOTE_MODE'
|
|||
|
should also be done for outgoing function arguments.
|
|||
|
|
|||
|
`PROMOTE_FUNCTION_RETURN'
|
|||
|
Define this macro if the promotion described by `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'
|
|||
|
Define this macro if the promotion described by `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'
|
|||
|
Normal alignment required for function parameters on the stack, in
|
|||
|
bits. All stack parameters receive at least this much alignment
|
|||
|
regardless of data type. On most machines, this is the same as the
|
|||
|
size of an integer.
|
|||
|
|
|||
|
`STACK_BOUNDARY'
|
|||
|
Define this macro if you wish to preserve a certain alignment for
|
|||
|
the stack pointer. The definition is a C expression for the
|
|||
|
desired alignment (measured in bits).
|
|||
|
|
|||
|
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 `STACK_BOUNDARY', the stack
|
|||
|
may be momentarily unaligned while pushing arguments.
|
|||
|
|
|||
|
`FUNCTION_BOUNDARY'
|
|||
|
Alignment required for a function entry point, in bits.
|
|||
|
|
|||
|
`BIGGEST_ALIGNMENT'
|
|||
|
Biggest alignment that any data type can require on this machine,
|
|||
|
in bits.
|
|||
|
|
|||
|
`MINIMUM_ATOMIC_ALIGNMENT'
|
|||
|
If defined, the smallest alignment, in bits, that can be given to
|
|||
|
an object that can be referenced in one operation, without
|
|||
|
disturbing any nearby object. Normally, this is `BITS_PER_UNIT',
|
|||
|
but may be larger on machines that don't have byte or half-word
|
|||
|
store operations.
|
|||
|
|
|||
|
`BIGGEST_FIELD_ALIGNMENT'
|
|||
|
Biggest alignment that any structure field can require on this
|
|||
|
machine, in bits. If defined, this overrides `BIGGEST_ALIGNMENT'
|
|||
|
for structure fields only.
|
|||
|
|
|||
|
`ADJUST_FIELD_ALIGN (FIELD, COMPUTED)'
|
|||
|
An expression for the alignment of a structure field FIELD if the
|
|||
|
alignment computed in the usual way is COMPUTED. GNU CC uses this
|
|||
|
value instead of the value in `BIGGEST_ALIGNMENT' or
|
|||
|
`BIGGEST_FIELD_ALIGNMENT', if defined, for structure fields only.
|
|||
|
|
|||
|
`MAX_OFILE_ALIGNMENT'
|
|||
|
Biggest alignment supported by the object file format of this
|
|||
|
machine. Use this macro to limit the alignment which can be
|
|||
|
specified using the `__attribute__ ((aligned (N)))' construct. If
|
|||
|
not defined, the default value is `BIGGEST_ALIGNMENT'.
|
|||
|
|
|||
|
`DATA_ALIGNMENT (TYPE, BASIC-ALIGN)'
|
|||
|
If defined, a C expression to compute the alignment for a static
|
|||
|
variable. TYPE is the data type, and BASIC-ALIGN is the alignment
|
|||
|
that the object would ordinarily have. The value of this macro is
|
|||
|
used instead of that alignment to align the object.
|
|||
|
|
|||
|
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 defined, a C expression to compute the alignment given to a
|
|||
|
constant that is being placed in memory. CONSTANT is the constant
|
|||
|
and BASIC-ALIGN is the alignment that the object would ordinarily
|
|||
|
have. The value of this macro is used instead of that alignment to
|
|||
|
align the object.
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
`EMPTY_FIELD_BOUNDARY'
|
|||
|
Alignment in bits to be given to a structure bit field that
|
|||
|
follows an empty field such as `int : 0;'.
|
|||
|
|
|||
|
Note that `PCC_BITFIELD_TYPE_MATTERS' also affects the alignment
|
|||
|
that results from an empty field.
|
|||
|
|
|||
|
`STRUCTURE_SIZE_BOUNDARY'
|
|||
|
Number of bits which any structure or union's size must be a
|
|||
|
multiple of. Each structure or union's size is rounded up to a
|
|||
|
multiple of this.
|
|||
|
|
|||
|
If you do not define this macro, the default is the same as
|
|||
|
`BITS_PER_UNIT'.
|
|||
|
|
|||
|
`STRICT_ALIGNMENT'
|
|||
|
Define this macro to be the value 1 if instructions will fail to
|
|||
|
work if given data not on the nominal alignment. If instructions
|
|||
|
will merely go slower in that case, define this macro as 0.
|
|||
|
|
|||
|
`PCC_BITFIELD_TYPE_MATTERS'
|
|||
|
Define this if you wish to imitate the way many other C compilers
|
|||
|
handle alignment of bitfields and the structures that contain them.
|
|||
|
|
|||
|
The behavior is that the type written for a bitfield (`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 bitfield 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 bitfield 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
|
|||
|
bitfields 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 bitfields work is to define
|
|||
|
`STRUCTURE_SIZE_BOUNDARY' as large as `BIGGEST_ALIGNMENT'. Then
|
|||
|
every structure can be accessed with fullwords.
|
|||
|
|
|||
|
Unless the machine has bitfield 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 GNU CC use the same conventions for laying
|
|||
|
out bitfields 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'
|
|||
|
Like PCC_BITFIELD_TYPE_MATTERS except that its effect is limited to
|
|||
|
aligning a bitfield within the structure.
|
|||
|
|
|||
|
`ROUND_TYPE_SIZE (STRUCT, SIZE, ALIGN)'
|
|||
|
Define this macro as an expression for the overall size of a
|
|||
|
structure (given by STRUCT as a tree node) when the size computed
|
|||
|
from the fields is SIZE and the alignment is ALIGN.
|
|||
|
|
|||
|
The default is to round SIZE up to a multiple of ALIGN.
|
|||
|
|
|||
|
`ROUND_TYPE_ALIGN (STRUCT, COMPUTED, SPECIFIED)'
|
|||
|
Define this macro as an expression for the alignment of a structure
|
|||
|
(given by STRUCT as a tree node) if the alignment computed in the
|
|||
|
usual way is COMPUTED and the alignment explicitly specified was
|
|||
|
SPECIFIED.
|
|||
|
|
|||
|
The default is to use SPECIFIED if it is larger; otherwise, use
|
|||
|
the smaller of COMPUTED and `BIGGEST_ALIGNMENT'
|
|||
|
|
|||
|
`MAX_FIXED_MODE_SIZE'
|
|||
|
An integer expression for the size in bits of the largest integer
|
|||
|
machine mode that should actually be used. All integer machine
|
|||
|
modes of this size or smaller can be used for structures and
|
|||
|
unions with the appropriate sizes. If this macro is undefined,
|
|||
|
`GET_MODE_BITSIZE (DImode)' is assumed.
|
|||
|
|
|||
|
`CHECK_FLOAT_VALUE (MODE, VALUE, OVERFLOW)'
|
|||
|
A C statement to validate the value VALUE (of type `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'
|
|||
|
A code distinguishing the floating point format of the target
|
|||
|
machine. There are three defined values:
|
|||
|
|
|||
|
`IEEE_FLOAT_FORMAT'
|
|||
|
This code indicates IEEE floating point. It is the default;
|
|||
|
there is no need to define this macro when the format is IEEE.
|
|||
|
|
|||
|
`VAX_FLOAT_FORMAT'
|
|||
|
This code indicates the peculiar format used on the Vax.
|
|||
|
|
|||
|
`UNKNOWN_FLOAT_FORMAT'
|
|||
|
This code indicates any other format.
|
|||
|
|
|||
|
The value of this macro is compared with `HOST_FLOAT_FORMAT'
|
|||
|
(*note Config::.) 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'
|
|||
|
GNU CC supports two ways of implementing C++ vtables: traditional
|
|||
|
or with so-called "thunks". The flag `-fvtable-thunk' chooses
|
|||
|
between them. Define this macro to be a C expression for the
|
|||
|
default value of that flag. If `DEFAULT_VTABLE_THUNKS' is 0, GNU
|
|||
|
CC 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 *Note Function
|
|||
|
Entry::), but is not binary compatible with code compiled using
|
|||
|
the traditional implementation. If you are writing a new ports,
|
|||
|
define `DEFAULT_VTABLE_THUNKS' to 1.
|
|||
|
|
|||
|
If you do not define this macro, the default for `-fvtable-thunk'
|
|||
|
is 0.
|
|||
|
|
|||
|
|
|||
|
File: gcc.info, Node: Type Layout, Next: Registers, Prev: Storage Layout, Up: Target Macros
|
|||
|
|
|||
|
Layout of Source Language Data Types
|
|||
|
====================================
|
|||
|
|
|||
|
These macros define the sizes and other characteristics of the
|
|||
|
standard basic data types used in programs being compiled. Unlike the
|
|||
|
macros in the previous section, these apply to specific features of C
|
|||
|
and related languages, rather than to fundamental aspects of storage
|
|||
|
layout.
|
|||
|
|
|||
|
`INT_TYPE_SIZE'
|
|||
|
A C expression for the size in bits of the type `int' on the
|
|||
|
target machine. If you don't define this, the default is one word.
|
|||
|
|
|||
|
`MAX_INT_TYPE_SIZE'
|
|||
|
Maximum number for the size in bits of the type `int' on the target
|
|||
|
machine. If this is undefined, the default is `INT_TYPE_SIZE'.
|
|||
|
Otherwise, it is the constant value that is the largest value that
|
|||
|
`INT_TYPE_SIZE' can have at run-time. This is used in `cpp'.
|
|||
|
|
|||
|
`SHORT_TYPE_SIZE'
|
|||
|
A C expression for the size in bits of the type `short' on the
|
|||
|
target machine. If you don't define this, the default is half a
|
|||
|
word. (If this would be less than one storage unit, it is rounded
|
|||
|
up to one unit.)
|
|||
|
|
|||
|
`LONG_TYPE_SIZE'
|
|||
|
A C expression for the size in bits of the type `long' on the
|
|||
|
target machine. If you don't define this, the default is one word.
|
|||
|
|
|||
|
`MAX_LONG_TYPE_SIZE'
|
|||
|
Maximum number for the size in bits of the type `long' on the
|
|||
|
target machine. If this is undefined, the default is
|
|||
|
`LONG_TYPE_SIZE'. Otherwise, it is the constant value that is the
|
|||
|
largest value that `LONG_TYPE_SIZE' can have at run-time. This is
|
|||
|
used in `cpp'.
|
|||
|
|
|||
|
`LONG_LONG_TYPE_SIZE'
|
|||
|
A C expression for the size in bits of the type `long long' on the
|
|||
|
target machine. If you don't define this, the default is two
|
|||
|
words. If you want to support GNU Ada on your machine, the value
|
|||
|
of macro must be at least 64.
|
|||
|
|
|||
|
`CHAR_TYPE_SIZE'
|
|||
|
A C expression for the size in bits of the type `char' on the
|
|||
|
target machine. If you don't define this, the default is one
|
|||
|
quarter of a word. (If this would be less than one storage unit,
|
|||
|
it is rounded up to one unit.)
|
|||
|
|
|||
|
`MAX_CHAR_TYPE_SIZE'
|
|||
|
Maximum number for the size in bits of the type `char' on the
|
|||
|
target machine. If this is undefined, the default is
|
|||
|
`CHAR_TYPE_SIZE'. Otherwise, it is the constant value that is the
|
|||
|
largest value that `CHAR_TYPE_SIZE' can have at run-time. This is
|
|||
|
used in `cpp'.
|
|||
|
|
|||
|
`FLOAT_TYPE_SIZE'
|
|||
|
A C expression for the size in bits of the type `float' on the
|
|||
|
target machine. If you don't define this, the default is one word.
|
|||
|
|
|||
|
`DOUBLE_TYPE_SIZE'
|
|||
|
A C expression for the size in bits of the type `double' on the
|
|||
|
target machine. If you don't define this, the default is two
|
|||
|
words.
|
|||
|
|
|||
|
`LONG_DOUBLE_TYPE_SIZE'
|
|||
|
A C expression for the size in bits of the type `long double' on
|
|||
|
the target machine. If you don't define this, the default is two
|
|||
|
words.
|
|||
|
|
|||
|
`WIDEST_HARDWARE_FP_SIZE'
|
|||
|
A C expression for the size in bits of the widest floating-point
|
|||
|
format supported by the hardware. If you define this macro, you
|
|||
|
must specify a value less than or equal to the value of
|
|||
|
`LONG_DOUBLE_TYPE_SIZE'. If you do not define this macro, the
|
|||
|
value of `LONG_DOUBLE_TYPE_SIZE' is the default.
|
|||
|
|
|||
|
`DEFAULT_SIGNED_CHAR'
|
|||
|
An expression whose value is 1 or 0, according to whether the type
|
|||
|
`char' should be signed or unsigned by default. The user can
|
|||
|
always override this default with the options `-fsigned-char' and
|
|||
|
`-funsigned-char'.
|
|||
|
|
|||
|
`DEFAULT_SHORT_ENUMS'
|
|||
|
A C expression to determine whether to give an `enum' type only as
|
|||
|
many bytes as it takes to represent the range of possible values
|
|||
|
of that type. A nonzero value means to do that; a zero value
|
|||
|
means all `enum' types should be allocated like `int'.
|
|||
|
|
|||
|
If you don't define the macro, the default is 0.
|
|||
|
|
|||
|
`SIZE_TYPE'
|
|||
|
A C expression for a string describing the name of the data type
|
|||
|
to use for size values. The typedef name `size_t' is defined
|
|||
|
using the contents of the string.
|
|||
|
|
|||
|
The string can contain more than one keyword. If so, separate
|
|||
|
them with spaces, and write first any length keyword, then
|
|||
|
`unsigned' if appropriate, and finally `int'. The string must
|
|||
|
exactly match one of the data type names defined in the function
|
|||
|
`init_decl_processing' in the file `c-decl.c'. You may not omit
|
|||
|
`int' or change the order--that would cause the compiler to crash
|
|||
|
on startup.
|
|||
|
|
|||
|
If you don't define this macro, the default is `"long unsigned
|
|||
|
int"'.
|
|||
|
|
|||
|
`PTRDIFF_TYPE'
|
|||
|
A C expression for a string describing the name of the data type
|
|||
|
to use for the result of subtracting two pointers. The typedef
|
|||
|
name `ptrdiff_t' is defined using the contents of the string. See
|
|||
|
`SIZE_TYPE' above for more information.
|
|||
|
|
|||
|
If you don't define this macro, the default is `"long int"'.
|
|||
|
|
|||
|
`WCHAR_TYPE'
|
|||
|
A C expression for a string describing the name of the data type
|
|||
|
to use for wide characters. The typedef name `wchar_t' is defined
|
|||
|
using the contents of the string. See `SIZE_TYPE' above for more
|
|||
|
information.
|
|||
|
|
|||
|
If you don't define this macro, the default is `"int"'.
|
|||
|
|
|||
|
`WCHAR_TYPE_SIZE'
|
|||
|
A C expression for the size in bits of the data type for wide
|
|||
|
characters. This is used in `cpp', which cannot make use of
|
|||
|
`WCHAR_TYPE'.
|
|||
|
|
|||
|
`MAX_WCHAR_TYPE_SIZE'
|
|||
|
Maximum number for the size in bits of the data type for wide
|
|||
|
characters. If this is undefined, the default is
|
|||
|
`WCHAR_TYPE_SIZE'. Otherwise, it is the constant value that is the
|
|||
|
largest value that `WCHAR_TYPE_SIZE' can have at run-time. This is
|
|||
|
used in `cpp'.
|
|||
|
|
|||
|
`OBJC_INT_SELECTORS'
|
|||
|
Define this macro if the type of Objective C selectors should be
|
|||
|
`int'.
|
|||
|
|
|||
|
If this macro is not defined, then selectors should have the type
|
|||
|
`struct objc_selector *'.
|
|||
|
|
|||
|
`OBJC_SELECTORS_WITHOUT_LABELS'
|
|||
|
Define this macro if the compiler can group all the selectors
|
|||
|
together into a vector and use just one label at the beginning of
|
|||
|
the vector. Otherwise, the compiler must give each selector its
|
|||
|
own assembler label.
|
|||
|
|
|||
|
On certain machines, it is important to have a separate label for
|
|||
|
each selector because this enables the linker to eliminate
|
|||
|
duplicate selectors.
|
|||
|
|
|||
|
`TARGET_BELL'
|
|||
|
A C constant expression for the integer value for escape sequence
|
|||
|
`\a'.
|
|||
|
|
|||
|
`TARGET_BS'
|
|||
|
`TARGET_TAB'
|
|||
|
`TARGET_NEWLINE'
|
|||
|
C constant expressions for the integer values for escape sequences
|
|||
|
`\b', `\t' and `\n'.
|
|||
|
|
|||
|
`TARGET_VT'
|
|||
|
`TARGET_FF'
|
|||
|
`TARGET_CR'
|
|||
|
C constant expressions for the integer values for escape sequences
|
|||
|
`\v', `\f' and `\r'.
|
|||
|
|