aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Elliston <bje@au.ibm.com>2006-01-17 19:58:35 +0000
committerBen Elliston <bje@gcc.gnu.org>2006-01-18 06:58:35 +1100
commita5a97921829bb7d51f71fdb05f5ef0d65be3f354 (patch)
treeb55036444726b6cd1120c89f2f8cf20733776507
parentfc0d1c49a1975c4cb4d9d5cb69c18dc2113e7bb0 (diff)
downloadgcc-a5a97921829bb7d51f71fdb05f5ef0d65be3f354.zip
gcc-a5a97921829bb7d51f71fdb05f5ef0d65be3f354.tar.gz
gcc-a5a97921829bb7d51f71fdb05f5ef0d65be3f354.tar.bz2
rs6000.c (rs6000_hard_regno_mode_ok): Reject decimal float modes for all floating point registers.
* config/rs6000/rs6000.c (rs6000_hard_regno_mode_ok): Reject decimal float modes for all floating point registers. From-SVN: r109836
-rw-r--r--gcc/ChangeLog3
-rw-r--r--gcc/config/rs6000/rs6000.c4
2 files changed, 6 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index eb684fb..252bab0 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,8 @@
2006-01-18 Ben Elliston <bje@au.ibm.com>
+ * config/rs6000/rs6000.c (rs6000_hard_regno_mode_ok): Reject
+ decimal float modes for all floating point registers.
+
* config/rs6000/predicates.md (reg_or_mem_operand): Pair up
match_code "mem" with match_test "macho_lo_sum_memory_operand".
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index b41a393..97430dd 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -1031,10 +1031,12 @@ rs6000_hard_regno_mode_ok (int regno, enum machine_mode mode)
if (INT_REGNO_P (regno))
return INT_REGNO_P (regno + HARD_REGNO_NREGS (regno, mode) - 1);
- /* The float registers can only hold floating modes and DImode. */
+ /* The float registers can only hold floating modes and DImode.
+ This also excludes decimal float modes. */
if (FP_REGNO_P (regno))
return
(SCALAR_FLOAT_MODE_P (mode)
+ && !DECIMAL_FLOAT_MODE_P (mode)
&& FP_REGNO_P (regno + HARD_REGNO_NREGS (regno, mode) - 1))
|| (GET_MODE_CLASS (mode) == MODE_INT
&& GET_MODE_SIZE (mode) == UNITS_PER_FP_WORD);