fpul-usage-1.c: New.
authorOleg Endo <olegendo@gcc.gnu.org>
Thu, 15 Mar 2012 01:18:04 +0000 (01:18 +0000)
committerOleg Endo <olegendo@gcc.gnu.org>
Thu, 15 Mar 2012 01:18:04 +0000 (01:18 +0000)
* gcc.target/sh/fpul-usage-1.c: New.

From-SVN: r185406

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/sh/fpul-usage-1.c [new file with mode: 0644]

index 64e8e9c43d0e49a9df06b27e4bff36fcb9d76e86..9d57d21fcd7b81b5425296e700754463f9a1e6f6 100644 (file)
@@ -1,3 +1,7 @@
+2012-03-15  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       * gcc.target/sh/fpul-usage-1.c: New.
+
 2012-03-14  Oleg Endo  <olegendo@gcc.gnu.org>
 
        PR target/49468
diff --git a/gcc/testsuite/gcc.target/sh/fpul-usage-1.c b/gcc/testsuite/gcc.target/sh/fpul-usage-1.c
new file mode 100644 (file)
index 0000000..394e7ef
--- /dev/null
@@ -0,0 +1,24 @@
+/* Check that the FPUL register is used when reading a float as an int and
+   vice versa, as opposed to pushing and popping the values over the stack.  */
+/* { dg-do compile { target "sh*-*-*" } } */
+/* { dg-options "-O1" } */
+/* { dg-skip-if "" { "sh*-*-*" } { "-m1" "-m2" "-m4al" "*nofpu" "-m4-340*" "-m4-400*" "-m4-500*" "-m5*" } { "" } }  */
+/* { dg-final { scan-assembler "fpul" } } */
+/* { dg-final { scan-assembler-not "r15" } } */
+
+int
+float_as_int (float val)
+{
+  union { float f; int i; } u;
+  u.f = val;
+  return u.i;
+}
+
+float
+int_as_float (int val)
+{
+  union { float f; int i; } u;
+  u.i = val;
+  return u.f;
+}
+