From e392cde316bbbe5967d1572def874ce354fd06e0 Mon Sep 17 00:00:00 2001
From: amylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 13 Dec 2005 12:49:56 +0000
Subject: [PATCH] 	* rtlhooks.c (gen_lowpart_general): Handle SUBREGs of
 floating point 	values.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@108479 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/ChangeLog  | 5 +++++
 gcc/rtlhooks.c | 7 +++++--
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0a6bd70888f5..345f7d6bec75 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2005-12-13  J"orn Rennecke <joern.rennecke@st.com>
+
+	* rtlhooks.c (gen_lowpart_general): Handle SUBREGs of floating point
+	values.
+
 2005-12-13  Nathan Sidwell  <nathan@codesourcery.com>
 
 	* config/mt/t-mt (MULTILIB_OPTIONS): Add ms2
diff --git a/gcc/rtlhooks.c b/gcc/rtlhooks.c
index bc413987865f..0034da783fac 100644
--- a/gcc/rtlhooks.c
+++ b/gcc/rtlhooks.c
@@ -44,9 +44,12 @@ gen_lowpart_general (enum machine_mode mode, rtx x)
 
   if (result)
     return result;
-  else if (REG_P (x))
+  /* If it's a REG, it must be a hard reg that's not valid in MODE.  */
+  else if (REG_P (x)
+	   /* Or we could have a subreg of a floating point value.  */
+	   || (GET_CODE (x) == SUBREG
+	       && FLOAT_MODE_P (GET_MODE (SUBREG_REG (x)))))
     {
-      /* Must be a hard reg that's not valid in MODE.  */
       result = gen_lowpart_common (mode, copy_to_reg (x));
       gcc_assert (result != 0);
       return result;
-- 
GitLab