mkconfig.sh: Include insn-flags.h and insn-constants.h before defaults.h.

* mkconfig.sh: Include insn-flags.h and insn-constants.h before
	defaults.h.
	* except.h: Move MUST_USE_SJLJ_EXCEPTIONS and USING_SJLJ_EXCEPTIONS
	to defaults.h
	* expr.h (BRANCH_COST, MOVE_RATIO, CLEAR_RATIO, SET_RATIO,
	DEFAULT_FUNCTION_ARG_PADDING, FUNCTION_ARG_PADDING,
	FUNCTION_ARG_BOUNDARY, STACK_SAVEAREA_MODE, STACK_SIZE_MODE,
	STACK_CHECK_BUILTIN, STACK_CHECK_STATIC_BUILTIN,
	STACK_CHECK_PROBE_INTERVAL_EXP, STACK_CHECK_MOVING_SP,
	STACK_OLD_CHECK_PROTECT, STACK_CHECK_PROTECT,
	STACK_CHECK_MAX_FRAME_SIZE, STACK_CHECK_FIXED_FRAME_SIZE,
	STACK_CHECK_MAX_VAR_SIZE): Move target macro defaults to defaults.h.
	* defaults.h: Updated for above mentioned changes.

From-SVN: r160195
This commit is contained in:
Steven Bosscher 2010-06-02 22:05:45 +00:00
parent 3f7c0b1bc3
commit 77ec430740
5 changed files with 231 additions and 181 deletions

View File

@ -1,3 +1,19 @@
2010-06-02 Steven Bosscher <steven@gcc.gnu.org>
* mkconfig.sh: Include insn-flags.h and insn-constants.h before
defaults.h.
* except.h: Move MUST_USE_SJLJ_EXCEPTIONS and USING_SJLJ_EXCEPTIONS
to defaults.h
* expr.h (BRANCH_COST, MOVE_RATIO, CLEAR_RATIO, SET_RATIO,
DEFAULT_FUNCTION_ARG_PADDING, FUNCTION_ARG_PADDING,
FUNCTION_ARG_BOUNDARY, STACK_SAVEAREA_MODE, STACK_SIZE_MODE,
STACK_CHECK_BUILTIN, STACK_CHECK_STATIC_BUILTIN,
STACK_CHECK_PROBE_INTERVAL_EXP, STACK_CHECK_MOVING_SP,
STACK_OLD_CHECK_PROTECT, STACK_CHECK_PROTECT,
STACK_CHECK_MAX_FRAME_SIZE, STACK_CHECK_FIXED_FRAME_SIZE,
STACK_CHECK_MAX_VAR_SIZE): Move target macro defaults to defaults.h.
* defaults.h: Updated for above mentioned changes.
2010-06-02 Kai Tietz <kai.tietz@onevision.com>
* c-common.c: Remove header include of tm_p.h.

View File

@ -1165,4 +1165,205 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#define CONSTANT_ADDRESS_P(X) (CONSTANT_P (X) && GET_CODE (X) != CONST_DOUBLE)
#endif
#ifdef GCC_INSN_FLAGS_H
/* Dependent default target macro definitions
This section of defaults.h defines target macros that depend on generated
headers. This is a bit awkward: We want to put all default definitions
for target macros in defaults.h, but some of the defaults depend on the
HAVE_* flags defines of insn-flags.h. But insn-flags.h is not always
included by files that do include defaults.h.
Fortunately, the default macro definitions that depend on the HAVE_*
macros are also the ones that will only be used inside GCC itself, i.e.
not in the gen* programs or in target objects like libgcc.
Obviously, it would be best to keep this section of defaults.h as small
as possible, by converting the macros defined below to target hooks or
functions.
*/
/* Just because the user configured --with-sjlj-exceptions=no doesn't
mean that we can use call frame exceptions. Detect that the target
has appropriate support. */
#ifndef MUST_USE_SJLJ_EXCEPTIONS
# if defined (EH_RETURN_DATA_REGNO) \
&& (defined (TARGET_UNWIND_INFO) \
|| (DWARF2_UNWIND_INFO \
&& (defined (EH_RETURN_HANDLER_RTX) \
|| defined (HAVE_eh_return))))
# define MUST_USE_SJLJ_EXCEPTIONS 0
# else
# define MUST_USE_SJLJ_EXCEPTIONS 1
# endif
#endif
#ifdef CONFIG_SJLJ_EXCEPTIONS
# if CONFIG_SJLJ_EXCEPTIONS == 1
# define USING_SJLJ_EXCEPTIONS 1
# endif
# if CONFIG_SJLJ_EXCEPTIONS == 0
# define USING_SJLJ_EXCEPTIONS 0
# if !defined(EH_RETURN_DATA_REGNO)
#error "EH_RETURN_DATA_REGNO required"
# endif
# if ! (defined(TARGET_UNWIND_INFO) || DWARF2_UNWIND_INFO)
#error "{DWARF2,TARGET}_UNWIND_INFO required"
# endif
# if !defined(TARGET_UNWIND_INFO) \
&& !(defined(EH_RETURN_HANDLER_RTX) || defined(HAVE_eh_return))
#error "EH_RETURN_HANDLER_RTX or eh_return required"
# endif
/* Usually the above error checks will have already triggered an
error, but backends may set MUST_USE_SJLJ_EXCEPTIONS for their own
reasons. */
# if MUST_USE_SJLJ_EXCEPTIONS
#error "Must use SJLJ exceptions but configured not to"
# endif
# endif
#else
# define USING_SJLJ_EXCEPTIONS MUST_USE_SJLJ_EXCEPTIONS
#endif
/* The default branch cost is 1. */
#ifndef BRANCH_COST
#define BRANCH_COST(speed_p, predictable_p) 1
#endif
/* If a memory-to-memory move would take MOVE_RATIO or more simple
move-instruction sequences, we will do a movmem or libcall instead. */
#ifndef MOVE_RATIO
#if defined (HAVE_movmemqi) || defined (HAVE_movmemhi) || defined (HAVE_movmemsi) || defined (HAVE_movmemdi) || defined (HAVE_movmemti)
#define MOVE_RATIO(speed) 2
#else
/* If we are optimizing for space (-Os), cut down the default move ratio. */
#define MOVE_RATIO(speed) ((speed) ? 15 : 3)
#endif
#endif
/* If a clear memory operation would take CLEAR_RATIO or more simple
move-instruction sequences, we will do a setmem or libcall instead. */
#ifndef CLEAR_RATIO
#if defined (HAVE_setmemqi) || defined (HAVE_setmemhi) || defined (HAVE_setmemsi) || defined (HAVE_setmemdi) || defined (HAVE_setmemti)
#define CLEAR_RATIO(speed) 2
#else
/* If we are optimizing for space, cut down the default clear ratio. */
#define CLEAR_RATIO(speed) ((speed) ? 15 :3)
#endif
#endif
/* If a memory set (to value other than zero) operation would take
SET_RATIO or more simple move-instruction sequences, we will do a movmem
or libcall instead. */
#ifndef SET_RATIO
#define SET_RATIO(speed) MOVE_RATIO(speed)
#endif
/* Supply a default definition for FUNCTION_ARG_PADDING:
usually pad upward, but pad short args downward on
big-endian machines. */
#define DEFAULT_FUNCTION_ARG_PADDING(MODE, TYPE) \
(! BYTES_BIG_ENDIAN \
? upward \
: (((MODE) == BLKmode \
? ((TYPE) && TREE_CODE (TYPE_SIZE (TYPE)) == INTEGER_CST \
&& int_size_in_bytes (TYPE) < (PARM_BOUNDARY / BITS_PER_UNIT)) \
: GET_MODE_BITSIZE (MODE) < PARM_BOUNDARY) \
? downward : upward))
#ifndef FUNCTION_ARG_PADDING
#define FUNCTION_ARG_PADDING(MODE, TYPE) \
DEFAULT_FUNCTION_ARG_PADDING ((MODE), (TYPE))
#endif
/* Supply a default definition for FUNCTION_ARG_BOUNDARY. Normally, we let
FUNCTION_ARG_PADDING, which also pads the length, handle any needed
alignment. */
#ifndef FUNCTION_ARG_BOUNDARY
#define FUNCTION_ARG_BOUNDARY(MODE, TYPE) PARM_BOUNDARY
#endif
/* Supply a default definition of STACK_SAVEAREA_MODE for emit_stack_save.
Normally move_insn, so Pmode stack pointer. */
#ifndef STACK_SAVEAREA_MODE
#define STACK_SAVEAREA_MODE(LEVEL) Pmode
#endif
/* Supply a default definition of STACK_SIZE_MODE for
allocate_dynamic_stack_space. Normally PLUS/MINUS, so word_mode. */
#ifndef STACK_SIZE_MODE
#define STACK_SIZE_MODE word_mode
#endif
/* Provide default values for the macros controlling stack checking. */
/* The default is neither full builtin stack checking... */
#ifndef STACK_CHECK_BUILTIN
#define STACK_CHECK_BUILTIN 0
#endif
/* ...nor static builtin stack checking. */
#ifndef STACK_CHECK_STATIC_BUILTIN
#define STACK_CHECK_STATIC_BUILTIN 0
#endif
/* The default interval is one page (4096 bytes). */
#ifndef STACK_CHECK_PROBE_INTERVAL_EXP
#define STACK_CHECK_PROBE_INTERVAL_EXP 12
#endif
/* The default is not to move the stack pointer. */
#ifndef STACK_CHECK_MOVING_SP
#define STACK_CHECK_MOVING_SP 0
#endif
/* This is a kludge to try to capture the discrepancy between the old
mechanism (generic stack checking) and the new mechanism (static
builtin stack checking). STACK_CHECK_PROTECT needs to be bumped
for the latter because part of the protection area is effectively
included in STACK_CHECK_MAX_FRAME_SIZE for the former. */
#ifdef STACK_CHECK_PROTECT
#define STACK_OLD_CHECK_PROTECT STACK_CHECK_PROTECT
#else
#define STACK_OLD_CHECK_PROTECT \
(USING_SJLJ_EXCEPTIONS ? 75 * UNITS_PER_WORD : 8 * 1024)
#endif
/* Minimum amount of stack required to recover from an anticipated stack
overflow detection. The default value conveys an estimate of the amount
of stack required to propagate an exception. */
#ifndef STACK_CHECK_PROTECT
#define STACK_CHECK_PROTECT \
(USING_SJLJ_EXCEPTIONS ? 75 * UNITS_PER_WORD : 12 * 1024)
#endif
/* Make the maximum frame size be the largest we can and still only need
one probe per function. */
#ifndef STACK_CHECK_MAX_FRAME_SIZE
#define STACK_CHECK_MAX_FRAME_SIZE \
((1 << STACK_CHECK_PROBE_INTERVAL_EXP) - UNITS_PER_WORD)
#endif
/* This is arbitrary, but should be large enough everywhere. */
#ifndef STACK_CHECK_FIXED_FRAME_SIZE
#define STACK_CHECK_FIXED_FRAME_SIZE (4 * UNITS_PER_WORD)
#endif
/* Provide a reasonable default for the maximum size of an object to
allocate in the fixed frame. We may need to be able to make this
controllable by the user at some point. */
#ifndef STACK_CHECK_MAX_VAR_SIZE
#define STACK_CHECK_MAX_VAR_SIZE (STACK_CHECK_MAX_FRAME_SIZE / 100)
#endif
#endif /* GCC_INSN_FLAGS_H */
#endif /* ! GCC_DEFAULTS_H */

View File

@ -295,50 +295,6 @@ extern eh_landing_pad get_eh_landing_pad_from_rtx (const_rtx);
FUNCTION_DECL for `std::terminate'. */
extern tree (*lang_protect_cleanup_actions) (void);
/* Just because the user configured --with-sjlj-exceptions=no doesn't
mean that we can use call frame exceptions. Detect that the target
has appropriate support. */
#ifndef MUST_USE_SJLJ_EXCEPTIONS
# if defined (EH_RETURN_DATA_REGNO) \
&& (defined (TARGET_UNWIND_INFO) \
|| (DWARF2_UNWIND_INFO \
&& (defined (EH_RETURN_HANDLER_RTX) \
|| defined (HAVE_eh_return))))
# define MUST_USE_SJLJ_EXCEPTIONS 0
# else
# define MUST_USE_SJLJ_EXCEPTIONS 1
# endif
#endif
#ifdef CONFIG_SJLJ_EXCEPTIONS
# if CONFIG_SJLJ_EXCEPTIONS == 1
# define USING_SJLJ_EXCEPTIONS 1
# endif
# if CONFIG_SJLJ_EXCEPTIONS == 0
# define USING_SJLJ_EXCEPTIONS 0
# if !defined(EH_RETURN_DATA_REGNO)
#error "EH_RETURN_DATA_REGNO required"
# endif
# if ! (defined(TARGET_UNWIND_INFO) || DWARF2_UNWIND_INFO)
#error "{DWARF2,TARGET}_UNWIND_INFO required"
# endif
# if !defined(TARGET_UNWIND_INFO) \
&& !(defined(EH_RETURN_HANDLER_RTX) || defined(HAVE_eh_return))
#error "EH_RETURN_HANDLER_RTX or eh_return required"
# endif
/* Usually the above error checks will have already triggered an
error, but backends may set MUST_USE_SJLJ_EXCEPTIONS for their own
reasons. */
# if MUST_USE_SJLJ_EXCEPTIONS
#error "Must use SJLJ exceptions but configured not to"
# endif
# endif
#else
# define USING_SJLJ_EXCEPTIONS MUST_USE_SJLJ_EXCEPTIONS
#endif
struct GTY(()) throw_stmt_node {
gimple stmt;
int lp_nr;

View File

@ -34,11 +34,6 @@ along with GCC; see the file COPYING3. If not see
/* For GET_MODE_BITSIZE, word_mode */
#include "machmode.h"
/* The default branch cost is 1. */
#ifndef BRANCH_COST
#define BRANCH_COST(speed_p, predictable_p) 1
#endif
/* This is the 4th arg to `expand_expr'.
EXPAND_STACK_PARM means we are possibly expanding a call param onto
the stack.
@ -61,37 +56,6 @@ enum expand_modifier {EXPAND_NORMAL = 0, EXPAND_STACK_PARM, EXPAND_SUM,
more information. */
#define OK_DEFER_POP (inhibit_defer_pop -= 1)
/* If a memory-to-memory move would take MOVE_RATIO or more simple
move-instruction sequences, we will do a movmem or libcall instead. */
#ifndef MOVE_RATIO
#if defined (HAVE_movmemqi) || defined (HAVE_movmemhi) || defined (HAVE_movmemsi) || defined (HAVE_movmemdi) || defined (HAVE_movmemti)
#define MOVE_RATIO(speed) 2
#else
/* If we are optimizing for space (-Os), cut down the default move ratio. */
#define MOVE_RATIO(speed) ((speed) ? 15 : 3)
#endif
#endif
/* If a clear memory operation would take CLEAR_RATIO or more simple
move-instruction sequences, we will do a setmem or libcall instead. */
#ifndef CLEAR_RATIO
#if defined (HAVE_setmemqi) || defined (HAVE_setmemhi) || defined (HAVE_setmemsi) || defined (HAVE_setmemdi) || defined (HAVE_setmemti)
#define CLEAR_RATIO(speed) 2
#else
/* If we are optimizing for space, cut down the default clear ratio. */
#define CLEAR_RATIO(speed) ((speed) ? 15 :3)
#endif
#endif
/* If a memory set (to value other than zero) operation would take
SET_RATIO or more simple move-instruction sequences, we will do a movmem
or libcall instead. */
#ifndef SET_RATIO
#define SET_RATIO(speed) MOVE_RATIO(speed)
#endif
enum direction {none, upward, downward};
/* Structure to record the size of a sequence of arguments
@ -166,106 +130,6 @@ do { \
((SIZE).var == 0 ? GEN_INT ((SIZE).constant) \
: expand_normal (ARGS_SIZE_TREE (SIZE)))
/* Supply a default definition for FUNCTION_ARG_PADDING:
usually pad upward, but pad short args downward on
big-endian machines. */
#define DEFAULT_FUNCTION_ARG_PADDING(MODE, TYPE) \
(! BYTES_BIG_ENDIAN \
? upward \
: (((MODE) == BLKmode \
? ((TYPE) && TREE_CODE (TYPE_SIZE (TYPE)) == INTEGER_CST \
&& int_size_in_bytes (TYPE) < (PARM_BOUNDARY / BITS_PER_UNIT)) \
: GET_MODE_BITSIZE (MODE) < PARM_BOUNDARY) \
? downward : upward))
#ifndef FUNCTION_ARG_PADDING
#define FUNCTION_ARG_PADDING(MODE, TYPE) \
DEFAULT_FUNCTION_ARG_PADDING ((MODE), (TYPE))
#endif
/* Supply a default definition for FUNCTION_ARG_BOUNDARY. Normally, we let
FUNCTION_ARG_PADDING, which also pads the length, handle any needed
alignment. */
#ifndef FUNCTION_ARG_BOUNDARY
#define FUNCTION_ARG_BOUNDARY(MODE, TYPE) PARM_BOUNDARY
#endif
/* Supply a default definition of STACK_SAVEAREA_MODE for emit_stack_save.
Normally move_insn, so Pmode stack pointer. */
#ifndef STACK_SAVEAREA_MODE
#define STACK_SAVEAREA_MODE(LEVEL) Pmode
#endif
/* Supply a default definition of STACK_SIZE_MODE for
allocate_dynamic_stack_space. Normally PLUS/MINUS, so word_mode. */
#ifndef STACK_SIZE_MODE
#define STACK_SIZE_MODE word_mode
#endif
/* Provide default values for the macros controlling stack checking. */
/* The default is neither full builtin stack checking... */
#ifndef STACK_CHECK_BUILTIN
#define STACK_CHECK_BUILTIN 0
#endif
/* ...nor static builtin stack checking. */
#ifndef STACK_CHECK_STATIC_BUILTIN
#define STACK_CHECK_STATIC_BUILTIN 0
#endif
/* The default interval is one page (4096 bytes). */
#ifndef STACK_CHECK_PROBE_INTERVAL_EXP
#define STACK_CHECK_PROBE_INTERVAL_EXP 12
#endif
/* The default is not to move the stack pointer. */
#ifndef STACK_CHECK_MOVING_SP
#define STACK_CHECK_MOVING_SP 0
#endif
/* This is a kludge to try to capture the discrepancy between the old
mechanism (generic stack checking) and the new mechanism (static
builtin stack checking). STACK_CHECK_PROTECT needs to be bumped
for the latter because part of the protection area is effectively
included in STACK_CHECK_MAX_FRAME_SIZE for the former. */
#ifdef STACK_CHECK_PROTECT
#define STACK_OLD_CHECK_PROTECT STACK_CHECK_PROTECT
#else
#define STACK_OLD_CHECK_PROTECT \
(USING_SJLJ_EXCEPTIONS ? 75 * UNITS_PER_WORD : 8 * 1024)
#endif
/* Minimum amount of stack required to recover from an anticipated stack
overflow detection. The default value conveys an estimate of the amount
of stack required to propagate an exception. */
#ifndef STACK_CHECK_PROTECT
#define STACK_CHECK_PROTECT \
(USING_SJLJ_EXCEPTIONS ? 75 * UNITS_PER_WORD : 12 * 1024)
#endif
/* Make the maximum frame size be the largest we can and still only need
one probe per function. */
#ifndef STACK_CHECK_MAX_FRAME_SIZE
#define STACK_CHECK_MAX_FRAME_SIZE \
((1 << STACK_CHECK_PROBE_INTERVAL_EXP) - UNITS_PER_WORD)
#endif
/* This is arbitrary, but should be large enough everywhere. */
#ifndef STACK_CHECK_FIXED_FRAME_SIZE
#define STACK_CHECK_FIXED_FRAME_SIZE (4 * UNITS_PER_WORD)
#endif
/* Provide a reasonable default for the maximum size of an object to
allocate in the fixed frame. We may need to be able to make this
controllable by the user at some point. */
#ifndef STACK_CHECK_MAX_VAR_SIZE
#define STACK_CHECK_MAX_VAR_SIZE (STACK_CHECK_MAX_FRAME_SIZE / 100)
#endif
/* This structure is used to pass around information about exploded
unary, binary and trinary expressions between expand_expr_real_1 and

View File

@ -63,6 +63,10 @@ done
# The first entry in HEADERS may be auto-FOO.h ;
# it wants to be included even when not -DIN_GCC.
# Postpone including defaults.h until after the insn-*
# headers, so that the HAVE_* flags are available
# when defaults.h gets included.
postpone_defaults_h="no"
if [ -n "$HEADERS" ]; then
set $HEADERS
case "$1" in auto-* )
@ -73,7 +77,11 @@ if [ -n "$HEADERS" ]; then
if [ $# -ge 1 ]; then
echo '#ifdef IN_GCC' >> ${output}T
for file in "$@"; do
echo "# include \"$file\"" >> ${output}T
if test x"$file" = x"defaults.h"; then
postpone_defaults_h="yes"
else
echo "# include \"$file\"" >> ${output}T
fi
done
echo '#endif' >> ${output}T
fi
@ -94,6 +102,11 @@ EOF
;;
esac
# If we postponed including defaults.h, add the #include now.
if test x"$postpone_defaults_h" = x"yes"; then
echo "# include \"defaults.h\"" >> ${output}T
fi
# Add multiple inclusion protection guard, part two.
echo "#endif /* ${header_guard} */" >> ${output}T