Commit 31d7b439 by Eric Botcazou

sparc.h (CANNOT_CHANGE_MODE_CLASS): In 64-bit mode, disallow changes from SFmode…

sparc.h (CANNOT_CHANGE_MODE_CLASS): In 64-bit mode, disallow changes from SFmode to mode with different size in FP regs.

	* config/sparc/sparc.h (CANNOT_CHANGE_MODE_CLASS): In 64-bit mode,
	disallow changes from SFmode to mode with different size in FP regs.

From-SVN: r184144
parent 5b4a7d0d
2012-01-29 Robert Millan <rmh@gnu.org> 2012-02-12 Eric Botcazou <ebotcazou@adacore.com>
* config/sparc/sparc.h (CANNOT_CHANGE_MODE_CLASS): In 64-bit mode,
disallow changes from SFmode to mode with different size in FP regs.
2012-02-12 Robert Millan <rmh@gnu.org>
Gerald Pfeifer <gerald@pfeifer.com> Gerald Pfeifer <gerald@pfeifer.com>
* ginclude/stddef.h [__FreeBSD_kernel__] (__size_t): Do not define. * ginclude/stddef.h [__FreeBSD_kernel__] (__size_t): Do not define.
......
...@@ -894,18 +894,21 @@ extern enum reg_class sparc_regno_reg_class[FIRST_PSEUDO_REGISTER]; ...@@ -894,18 +894,21 @@ extern enum reg_class sparc_regno_reg_class[FIRST_PSEUDO_REGISTER];
#define REGNO_REG_CLASS(REGNO) sparc_regno_reg_class[(REGNO)] #define REGNO_REG_CLASS(REGNO) sparc_regno_reg_class[(REGNO)]
/* Defines invalid mode changes. Borrowed from pa64-regs.h. /* Defines invalid mode changes. Borrowed from the PA port.
SImode loads to floating-point registers are not zero-extended. SImode loads to floating-point registers are not zero-extended.
The definition for LOAD_EXTEND_OP specifies that integer loads The definition for LOAD_EXTEND_OP specifies that integer loads
narrower than BITS_PER_WORD will be zero-extended. As a result, narrower than BITS_PER_WORD will be zero-extended. As a result,
we inhibit changes from SImode unless they are to a mode that is we inhibit changes from SImode unless they are to a mode that is
identical in size. */ identical in size.
Likewise for SFmode, since word-mode paradoxical subregs are
problematic on big-endian architectures. */
#define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \ #define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \
(TARGET_ARCH64 \ (TARGET_ARCH64 \
&& (FROM) == SImode \ && GET_MODE_SIZE (FROM) == 4 \
&& GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO) \ && GET_MODE_SIZE (TO) != 4 \
? reg_classes_intersect_p (CLASS, FP_REGS) : 0) ? reg_classes_intersect_p (CLASS, FP_REGS) : 0)
/* This is the order in which to allocate registers normally. /* This is the order in which to allocate registers normally.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment