aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Meissner <meissner@linux.vnet.ibm.com>2015-02-06 19:25:54 +0000
committerMichael Meissner <meissner@linux.vnet.ibm.com>2015-02-06 19:25:54 +0000
commit6e13cc646b6c7285576d6817859b7dae2c50c34f (patch)
treedce3654e1c1f98c05af3cbd65d58db0069ba10ea
parent8af22d29027e0c2bb1b2ae709d792a7fc10d88c5 (diff)
Backport pr64205 fix
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/ibm/gcc-4_9-addr@220487 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog.meissner10
-rw-r--r--gcc/config/rs6000/rs6000.c20
-rw-r--r--gcc/testsuite/ChangeLog.meissner8
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr64205.c17
4 files changed, 51 insertions, 4 deletions
diff --git a/gcc/ChangeLog.meissner b/gcc/ChangeLog.meissner
index d83c79fcf21..a373373a3ec 100644
--- a/gcc/ChangeLog.meissner
+++ b/gcc/ChangeLog.meissner
@@ -1,5 +1,15 @@
2015-02-06 Michael Meissner <meissner@linux.vnet.ibm.com>
+ Back port from trunk:
+ 2015-02-06 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/64205
+ * config/rs6000/rs6000.c (rs6000_init_hard_regno_mode_ok): Do not
+ add a general secondary reload handler for SDmode, unless we have
+ both read/write support for SDmode.
+
+2015-02-06 Michael Meissner <meissner@linux.vnet.ibm.com>
+
Merge up to ibm/gcc-4_9-branch, subversion id 220484.
* REVISION: Update subversion id.
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index b5b18411f85..28bb07dc9d2 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -2804,8 +2804,14 @@ rs6000_init_hard_regno_mode_ok (bool global_init_p)
reg_addr[DDmode].reload_load = CODE_FOR_reload_dd_di_load;
reg_addr[SFmode].reload_store = CODE_FOR_reload_sf_di_store;
reg_addr[SFmode].reload_load = CODE_FOR_reload_sf_di_load;
- reg_addr[SDmode].reload_store = CODE_FOR_reload_sd_di_store;
- reg_addr[SDmode].reload_load = CODE_FOR_reload_sd_di_load;
+
+ /* Only provide a reload handler for SDmode if lfiwzx/stfiwx are
+ available. */
+ if (TARGET_NO_SDMODE_STACK)
+ {
+ reg_addr[SDmode].reload_store = CODE_FOR_reload_sd_di_store;
+ reg_addr[SDmode].reload_load = CODE_FOR_reload_sd_di_load;
+ }
if (TARGET_VSX_TIMODE)
{
@@ -2858,8 +2864,14 @@ rs6000_init_hard_regno_mode_ok (bool global_init_p)
reg_addr[DDmode].reload_load = CODE_FOR_reload_dd_si_load;
reg_addr[SFmode].reload_store = CODE_FOR_reload_sf_si_store;
reg_addr[SFmode].reload_load = CODE_FOR_reload_sf_si_load;
- reg_addr[SDmode].reload_store = CODE_FOR_reload_sd_si_store;
- reg_addr[SDmode].reload_load = CODE_FOR_reload_sd_si_load;
+
+ /* Only provide a reload handler for SDmode if lfiwzx/stfiwx are
+ available. */
+ if (TARGET_NO_SDMODE_STACK)
+ {
+ reg_addr[SDmode].reload_store = CODE_FOR_reload_sd_si_store;
+ reg_addr[SDmode].reload_load = CODE_FOR_reload_sd_si_load;
+ }
if (TARGET_VSX_TIMODE)
{
diff --git a/gcc/testsuite/ChangeLog.meissner b/gcc/testsuite/ChangeLog.meissner
index a79d0da9920..666c6a4826f 100644
--- a/gcc/testsuite/ChangeLog.meissner
+++ b/gcc/testsuite/ChangeLog.meissner
@@ -1,5 +1,13 @@
2015-02-06 Michael Meissner <meissner@linux.vnet.ibm.com>
+ Back port from trunk:
+ 2015-02-06 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/64205
+ * gcc.target/powerpc/pr64205.c: New file.
+
+2015-02-06 Michael Meissner <meissner@linux.vnet.ibm.com>
+
Merge up to ibm/gcc-4_9-branch, subversion id 220484.
2014-12-11 Michael Meissner <meissner@linux.vnet.ibm.com>
diff --git a/gcc/testsuite/gcc.target/powerpc/pr64205.c b/gcc/testsuite/gcc.target/powerpc/pr64205.c
new file mode 100644
index 00000000000..58e4b980fd8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr64205.c
@@ -0,0 +1,17 @@
+/* { dg-do compile { target { powerpc*-*-* && ilp32 } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=G5" } } */
+/* { dg-options "-O2 -mcpu=G5 -maltivec -m32" } */
+
+union ieee754r_Decimal32
+{
+ _Decimal32 sd;
+ unsigned int cc0;
+};
+
+unsigned int
+__decoded32 (_Decimal32 a)
+{
+ union ieee754r_Decimal32 d;
+ d.sd = a;
+ return d.cc0;
+}