diff options
author | Michael Meissner <meissner@gcc.gnu.org> | 2012-01-10 01:01:01 +0000 |
---|---|---|
committer | Michael Meissner <meissner@gcc.gnu.org> | 2012-01-10 01:01:01 +0000 |
commit | df5a9a7ccc58153f578002f6674701842348f912 (patch) | |
tree | 602a6bec28f21da0e67a456354cc1102e1fe7ba8 | |
parent | a5c1636f5f6a6593c47266fb3de3158c7e465624 (diff) | |
download | gcc-df5a9a7ccc58153f578002f6674701842348f912.zip gcc-df5a9a7ccc58153f578002f6674701842348f912.tar.gz gcc-df5a9a7ccc58153f578002f6674701842348f912.tar.bz2 |
Fix bugs in -mvsx-scalar-memory and -mvsx-scalar-double
From-SVN: r183048
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 13 | ||||
-rw-r--r-- | gcc/config/rs6000/vsx.md | 8 |
3 files changed, 25 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8e1959a..c24ea00 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ + + * config/rs6000/rs6000.c (rs6000_init_hard_regno_mode_ok): Add DF + reload patterns if -mvsx-scalar-memory. + + * config/rs6000/vsx.md (vsx_xscvspdp): Allow xscvspdp to be + generated, even -mno-vsx-scalar-double was used. + (vsx_xscvdpsp_scalar): Likewise. + (vsx_xscvspdp_scalar2): Likewise. + 2012-01-09 Tom de Vries <tom@codesourcery.com> Andrew Pinski <apinski@cavium.com> diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 932bd83..5329153 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -1,6 +1,7 @@ /* Subroutines used for code generation on IBM RS/6000. Copyright (C) 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, - 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, + 2012 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu) @@ -2332,6 +2333,11 @@ rs6000_init_hard_regno_mode_ok (bool global_init_p) rs6000_vector_reload[V4SFmode][1] = CODE_FOR_reload_v4sf_di_load; rs6000_vector_reload[V2DFmode][0] = CODE_FOR_reload_v2df_di_store; rs6000_vector_reload[V2DFmode][1] = CODE_FOR_reload_v2df_di_load; + if (TARGET_VSX && TARGET_VSX_SCALAR_MEMORY) + { + rs6000_vector_reload[DFmode][0] = CODE_FOR_reload_df_di_store; + rs6000_vector_reload[DFmode][1] = CODE_FOR_reload_df_di_load; + } } else { @@ -2347,6 +2353,11 @@ rs6000_init_hard_regno_mode_ok (bool global_init_p) rs6000_vector_reload[V4SFmode][1] = CODE_FOR_reload_v4sf_si_load; rs6000_vector_reload[V2DFmode][0] = CODE_FOR_reload_v2df_si_store; rs6000_vector_reload[V2DFmode][1] = CODE_FOR_reload_v2df_si_load; + if (TARGET_VSX && TARGET_VSX_SCALAR_MEMORY) + { + rs6000_vector_reload[DFmode][0] = CODE_FOR_reload_df_si_store; + rs6000_vector_reload[DFmode][1] = CODE_FOR_reload_df_si_load; + } } } diff --git a/gcc/config/rs6000/vsx.md b/gcc/config/rs6000/vsx.md index 634bd23..c23a835 100644 --- a/gcc/config/rs6000/vsx.md +++ b/gcc/config/rs6000/vsx.md @@ -1,5 +1,5 @@ ;; VSX patterns. -;; Copyright (C) 2009, 2010, 2011 +;; Copyright (C) 2009, 2010, 2011, 2012 ;; Free Software Foundation, Inc. ;; Contributed by Michael Meissner <meissner@linux.vnet.ibm.com> @@ -919,7 +919,7 @@ [(set (match_operand:DF 0 "vsx_register_operand" "=ws,?wa") (unspec:DF [(match_operand:V4SF 1 "vsx_register_operand" "wa,wa")] UNSPEC_VSX_CVSPDP))] - "VECTOR_UNIT_VSX_P (DFmode)" + "VECTOR_UNIT_VSX_P (V4SFmode)" "xscvspdp %x0,%x1" [(set_attr "type" "fp")]) @@ -929,7 +929,7 @@ [(set (match_operand:V4SF 0 "vsx_register_operand" "=wa") (unspec:V4SF [(match_operand:SF 1 "vsx_register_operand" "f")] UNSPEC_VSX_CVSPDP))] - "VECTOR_UNIT_VSX_P (DFmode)" + "VECTOR_UNIT_VSX_P (V4SFmode)" "xscvdpsp %x0,%x1" [(set_attr "type" "fp")]) @@ -938,7 +938,7 @@ [(set (match_operand:SF 0 "vsx_register_operand" "=f") (unspec:SF [(match_operand:V4SF 1 "vsx_register_operand" "wa")] UNSPEC_VSX_CVSPDP))] - "VECTOR_UNIT_VSX_P (DFmode)" + "VECTOR_UNIT_VSX_P (V4SFmode)" "xscvspdp %x0,%x1" [(set_attr "type" "fp")]) |