mirror of git://gcc.gnu.org/git/gcc.git
gcc: xtensa: allow XCHAL_* macros to be non-constant
XCHAL_* macros from the xtensa-config.h are used in a number of places that require them to be preprocessor constants. Rewrite these places so that non-constant XCHAL_* definitions could be used there. 2017-06-14 Max Filippov <jcmvbkbc@gmail.com> gcc/ * config/xtensa/xtensa.c (xtensa_option_override): Append MASK_CONST16 to target_flags in the absence of TARGET_L32R. (hwloop_optimize, hwloop_fail, hwloop_pattern_reg, xtensa_doloop_hooks): Define unconditionally. (xtensa_reorg_loops): Only call reorg_loops in the presence of TARGET_LOOPS. * config/xtensa/xtensa.h (TARGET_L32R): New definition. (TARGET_DEFAULT): Remove XCHAL_HAVE_L32R condition and account for it in xtensa_option_override. (HARD_FRAME_POINTER_IS_FRAME_POINTER, HARD_FRAME_POINTER_IS_ARG_POINTER): New definitions. From-SVN: r249202
This commit is contained in:
parent
e72c4afd99
commit
1a711a0b5c
|
|
@ -1,3 +1,17 @@
|
||||||
|
2017-06-14 Max Filippov <jcmvbkbc@gmail.com>
|
||||||
|
|
||||||
|
* config/xtensa/xtensa.c (xtensa_option_override): Append
|
||||||
|
MASK_CONST16 to target_flags in the absence of TARGET_L32R.
|
||||||
|
(hwloop_optimize, hwloop_fail, hwloop_pattern_reg,
|
||||||
|
xtensa_doloop_hooks): Define unconditionally.
|
||||||
|
(xtensa_reorg_loops): Only call reorg_loops in the presence of
|
||||||
|
TARGET_LOOPS.
|
||||||
|
* config/xtensa/xtensa.h (TARGET_L32R): New definition.
|
||||||
|
(TARGET_DEFAULT): Remove XCHAL_HAVE_L32R condition and account
|
||||||
|
for it in xtensa_option_override.
|
||||||
|
(HARD_FRAME_POINTER_IS_FRAME_POINTER,
|
||||||
|
HARD_FRAME_POINTER_IS_ARG_POINTER): New definitions.
|
||||||
|
|
||||||
2017-06-14 Boris Kolpackov <boris@codesynthesis.com>
|
2017-06-14 Boris Kolpackov <boris@codesynthesis.com>
|
||||||
|
|
||||||
* doc/cppopts.texi: Document '-' special value to -MF.
|
* doc/cppopts.texi: Document '-' special value to -MF.
|
||||||
|
|
|
||||||
|
|
@ -2182,6 +2182,13 @@ xtensa_option_override (void)
|
||||||
int regno;
|
int regno;
|
||||||
machine_mode mode;
|
machine_mode mode;
|
||||||
|
|
||||||
|
/* Use CONST16 in the absence of L32R.
|
||||||
|
Set it in the TARGET_OPTION_OVERRIDE to avoid dependency on xtensa
|
||||||
|
configuration in the xtensa-common.c */
|
||||||
|
|
||||||
|
if (!TARGET_L32R)
|
||||||
|
target_flags |= MASK_CONST16;
|
||||||
|
|
||||||
if (!TARGET_BOOLEANS && TARGET_HARD_FLOAT)
|
if (!TARGET_BOOLEANS && TARGET_HARD_FLOAT)
|
||||||
error ("boolean registers required for the floating-point option");
|
error ("boolean registers required for the floating-point option");
|
||||||
|
|
||||||
|
|
@ -4078,8 +4085,6 @@ xtensa_invalid_within_doloop (const rtx_insn *insn)
|
||||||
|
|
||||||
/* Optimize LOOP. */
|
/* Optimize LOOP. */
|
||||||
|
|
||||||
#if TARGET_LOOPS
|
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
hwloop_optimize (hwloop_info loop)
|
hwloop_optimize (hwloop_info loop)
|
||||||
{
|
{
|
||||||
|
|
@ -4266,14 +4271,9 @@ static struct hw_doloop_hooks xtensa_doloop_hooks =
|
||||||
static void
|
static void
|
||||||
xtensa_reorg_loops (void)
|
xtensa_reorg_loops (void)
|
||||||
{
|
{
|
||||||
|
if (TARGET_LOOPS)
|
||||||
reorg_loops (false, &xtensa_doloop_hooks);
|
reorg_loops (false, &xtensa_doloop_hooks);
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
static inline void
|
|
||||||
xtensa_reorg_loops (void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Implement the TARGET_MACHINE_DEPENDENT_REORG pass. */
|
/* Implement the TARGET_MACHINE_DEPENDENT_REORG pass. */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -66,10 +66,9 @@ along with GCC; see the file COPYING3. If not see
|
||||||
#define TARGET_LOOPS XCHAL_HAVE_LOOPS
|
#define TARGET_LOOPS XCHAL_HAVE_LOOPS
|
||||||
#define TARGET_WINDOWED_ABI (XSHAL_ABI == XTHAL_ABI_WINDOWED)
|
#define TARGET_WINDOWED_ABI (XSHAL_ABI == XTHAL_ABI_WINDOWED)
|
||||||
#define TARGET_DEBUG XCHAL_HAVE_DEBUG
|
#define TARGET_DEBUG XCHAL_HAVE_DEBUG
|
||||||
|
#define TARGET_L32R XCHAL_HAVE_L32R
|
||||||
|
|
||||||
#define TARGET_DEFAULT \
|
#define TARGET_DEFAULT (MASK_SERIALIZE_VOLATILE)
|
||||||
((XCHAL_HAVE_L32R ? 0 : MASK_CONST16) | \
|
|
||||||
MASK_SERIALIZE_VOLATILE)
|
|
||||||
|
|
||||||
#ifndef HAVE_AS_TLS
|
#ifndef HAVE_AS_TLS
|
||||||
#define HAVE_AS_TLS 0
|
#define HAVE_AS_TLS 0
|
||||||
|
|
@ -362,6 +361,12 @@ extern char xtensa_hard_regno_mode_ok[][FIRST_PSEUDO_REGISTER];
|
||||||
/* Base register for access to arguments of the function. */
|
/* Base register for access to arguments of the function. */
|
||||||
#define ARG_POINTER_REGNUM (GP_REG_FIRST + 17)
|
#define ARG_POINTER_REGNUM (GP_REG_FIRST + 17)
|
||||||
|
|
||||||
|
/* Hard frame pointer is neither frame nor arg pointer.
|
||||||
|
The definitions are here because actual hard frame pointer register
|
||||||
|
definition is not a preprocessor constant. */
|
||||||
|
#define HARD_FRAME_POINTER_IS_FRAME_POINTER 0
|
||||||
|
#define HARD_FRAME_POINTER_IS_ARG_POINTER 0
|
||||||
|
|
||||||
/* For now we don't try to use the full set of boolean registers. Without
|
/* For now we don't try to use the full set of boolean registers. Without
|
||||||
software pipelining of FP operations, there's not much to gain and it's
|
software pipelining of FP operations, there's not much to gain and it's
|
||||||
a real pain to get them reloaded. */
|
a real pain to get them reloaded. */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue