2014-05-16 Christian Bruel <christian.bruel@st.com>
PR target/61195
* config/sh/sh.c (movsf_ie): Unset fp_mode for fmov.
2014-05-16 Christian Bruel <christian.bruel@st.com>
PR target/61195
* gcc.target/sh/pr61195.c: New test.
===================================================================
@@ -8357,9 +8357,26 @@ label:
(const_int 2)
(const_int 2)
(const_int 0)])
- (set (attr "fp_mode") (if_then_else (eq_attr "fmovd" "yes")
- (const_string "single")
- (const_string "single")))])
+ (set_attr_alternative "fp_mode"
+ [(if_then_else (eq_attr "fmovd" "yes") (const_string "single") (const_string "none"))
+ (const_string "none")
+ (const_string "single")
+ (const_string "single")
+ (const_string "none")
+ (if_then_else (eq_attr "fmovd" "yes") (const_string "single") (const_string "none"))
+ (if_then_else (eq_attr "fmovd" "yes") (const_string "single") (const_string "none"))
+ (const_string "none")
+ (const_string "none")
+ (const_string "none")
+ (const_string "none")
+ (const_string "none")
+ (const_string "none")
+ (const_string "none")
+ (const_string "none")
+ (const_string "none")
+ (const_string "none")
+ (const_string "none")
+ (const_string "none")])])
(define_split
[(set (match_operand:SF 0 "register_operand" "")
===================================================================
@@ -0,0 +1,19 @@
+/* Verify that we don't switch mode for single moves. */
+/* { dg-do compile } */
+/* { dg-require-effective-target hard_float } */
+/* { dg-skip-if "" { *-*-* } { "mfmovd" } { "" } } */
+/* { dg-final { scan-assembler-not "fpscr" } } */
+
+float *g;
+
+float
+foo(float f)
+{
+ return f;
+}
+
+float
+foo1(void)
+{
+ return *g;
+}