* config/rs6000/e500.h (HARD_REGNO_CALLER_SAVE_MODE): Define.
* caller-save.c (insert_restore, insert_save): Use non-validate
form of adjust_address.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@161163
138bc75d-0d04-0410-961f-
82ee72b054a4
+2010-06-22 Alan Modra <amodra@gmail.com>
+
+ PR target/44364
+ * config/rs6000/e500.h (HARD_REGNO_CALLER_SAVE_MODE): Define.
+ * caller-save.c (insert_restore, insert_save): Use non-validate
+ form of adjust_address.
+
2010-06-21 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
PR target/39690
2010-06-21 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
PR target/39690
/* Check that insn to restore REGNO in save_mode[regno] is
correct. */
&& reg_save_code (regno, save_mode[regno]) >= 0)
/* Check that insn to restore REGNO in save_mode[regno] is
correct. */
&& reg_save_code (regno, save_mode[regno]) >= 0)
- mem = adjust_address (mem, save_mode[regno], 0);
+ mem = adjust_address_nv (mem, save_mode[regno], 0);
else
mem = copy_rtx (mem);
else
mem = copy_rtx (mem);
/* Check that insn to save REGNO in save_mode[regno] is
correct. */
&& reg_save_code (regno, save_mode[regno]) >= 0)
/* Check that insn to save REGNO in save_mode[regno] is
correct. */
&& reg_save_code (regno, save_mode[regno]) >= 0)
- mem = adjust_address (mem, save_mode[regno], 0);
+ mem = adjust_address_nv (mem, save_mode[regno], 0);
else
mem = copy_rtx (mem);
else
mem = copy_rtx (mem);
- Copyright (C) 2003, 2004, 2006, 2007, 2008, 2009 Free Software
+ Copyright (C) 2003, 2004, 2006, 2007, 2008, 2009, 2010 Free Software
Foundation, Inc.
This file is part of GCC.
Foundation, Inc.
This file is part of GCC.
error ("E500 and FPRs not supported"); \
} \
} while (0)
error ("E500 and FPRs not supported"); \
} \
} while (0)
+
+/* When setting up caller-save slots (MODE == VOIDmode) ensure we
+ allocate space for DFmode. Save gprs in the correct mode too. */
+#define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS, MODE) \
+ (TARGET_E500_DOUBLE && ((MODE) == VOIDmode || (MODE) == DFmode) \
+ ? DFmode \
+ : choose_hard_reg_mode ((REGNO), (NREGS), false))