public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: gengqi <gengqi@linux.alibaba.com>
To: gcc-patches@gcc.gnu.org, gengqi@linux.alibaba.com
Subject: [PATCH 6/7] C-SKY: Cases for csky fpuv3 instructions.
Date: Thu, 29 Oct 2020 21:23:02 +0800	[thread overview]
Message-ID: <20201029132302.1616-6-gengqi@linux.alibaba.com> (raw)
In-Reply-To: <20201029132302.1616-1-gengqi@linux.alibaba.com>

gcc/testsuite/ChangeLog:

	* gcc/testsuite/gcc.target/csky/fpuv3/fpuv3.exp: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_div.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fadd.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fdtos.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fftoi_rm.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fftoi_rz.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fhtos.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fitof.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fmov.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fmovi.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fmula.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fmuls.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fneg.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fnmula.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fnmuls.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fstod.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fstoh.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fsub.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fxtof.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_h.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_hs.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_hsz.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_hz.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_ls.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_lsz.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_lt.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_ltz.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_max.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_min.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_mul.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_mula.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_muls.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_ne.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_nez.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_recip.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_sqrt.c: New.
	* gcc/testsuite/gcc.target/csky/fpuv3/fpv3_unordered.c: New.
---
 gcc/testsuite/gcc.target/csky/fpuv3/fpuv3.exp      | 50 +++++++++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_div.c     | 15 ++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fadd.c    | 23 ++++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fdtos.c   | 11 +++
 .../gcc.target/csky/fpuv3/fpv3_fftoi_rm.c          | 55 +++++++++++++
 .../gcc.target/csky/fpuv3/fpv3_fftoi_rz.c          | 41 +++++++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fhtos.c   | 11 +++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fitof.c   | 72 ++++++++++++++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fmov.c    | 96 ++++++++++++++++++++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fmovi.c   | 31 +++++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fmula.c   | 23 ++++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fmuls.c   | 23 ++++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fneg.c    | 22 +++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fnmula.c  | 14 ++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fnmuls.c  | 14 ++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fstod.c   | 11 +++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fstoh.c   | 11 +++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fsub.c    | 23 ++++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fxtof.c   | 76 +++++++++++++++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_h.c       | 20 +++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_hs.c      | 19 +++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_hsz.c     | 21 +++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_hz.c      | 20 +++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_ls.c      | 19 +++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_lsz.c     | 20 +++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_lt.c      | 19 +++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_ltz.c     | 20 +++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_max.c     | 16 ++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_min.c     | 16 ++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_mul.c     | 15 ++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_mula.c    | 16 ++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_muls.c    | 16 ++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_ne.c      | 19 +++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_nez.c     | 21 +++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_recip.c   | 14 ++++
 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_sqrt.c    | 16 ++++
 .../gcc.target/csky/fpuv3/fpv3_unordered.c         | 29 +++++++
 37 files changed, 958 insertions(+)
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpuv3.exp
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_div.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fadd.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fdtos.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fftoi_rm.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fftoi_rz.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fhtos.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fitof.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fmov.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fmovi.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fmula.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fmuls.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fneg.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fnmula.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fnmuls.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fstod.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fstoh.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fsub.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fxtof.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_h.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_hs.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_hsz.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_hz.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_ls.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_lsz.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_lt.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_ltz.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_max.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_min.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_mul.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_mula.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_muls.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_ne.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_nez.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_recip.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_sqrt.c
 create mode 100644 gcc/testsuite/gcc.target/csky/fpuv3/fpv3_unordered.c

diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpuv3.exp b/gcc/testsuite/gcc.target/csky/fpuv3/fpuv3.exp
new file mode 100644
index 0000000..1170e12
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpuv3.exp
@@ -0,0 +1,50 @@
+# Copyright (C) 1997, 2004, 2006, 2007 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3.  If not see
+# <http://www.gnu.org/licenses/>.
+
+# GCC testsuite that uses the `dg.exp' driver.
+
+# Exit immediately if this isn't a csky target.
+if { ![istarget csky*-*-*]} then {
+  return
+}
+
+set cflags [board_info target cflags]
+if { [string first "ck6" "${cflags}"] >= 0 } {
+       verbose "the test is not support "
+       return
+}
+if { [string first "ck5" "${cflags}"] >= 0 } {
+       verbose "the test is not support "
+       return
+}
+
+# Load support procs.
+load_lib gcc-dg.exp
+
+global DEFAULT_CFLAGS
+if ![info exists DEFAULT_CFLAGS] then {
+    set DEFAULT_CFLAGS ""
+}
+
+# Initialize `dg'.
+dg-init
+
+# Main loop.
+dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cCS\]]] \
+	"" $DEFAULT_CFLAGS
+
+# All done.
+dg-finish
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_div.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_div.c
new file mode 100644
index 0000000..32a1551
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_div.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "" } */
+
+float div32(float a, float b){
+  return a/b;
+}
+
+
+float div64(double a, double b){
+  return a/b;
+}
+
+/* { dg-final { scan-assembler "fdiv\.32" } }*/
+/* { dg-final { scan-assembler "fdiv\.64" } }*/
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fadd.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fadd.c
new file mode 100644
index 0000000..d54b529
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fadd.c
@@ -0,0 +1,23 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "-mfpu=fpv3" } */
+
+__fp16 funch(__fp16 a, __fp16 b)
+{
+  return a + b;
+}
+
+float funcs(float a, float b)
+{
+  return a + b;
+}
+
+double funcd(double a, double b)
+{
+  return a + b;
+}
+
+/* { dg-final { scan-assembler "fadd\.16" } }*/
+/* { dg-final { scan-assembler "fadd\.32" } }*/
+/* { dg-final { scan-assembler "fadd\.64" } }*/
+
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fdtos.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fdtos.c
new file mode 100644
index 0000000..034b15e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fdtos.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "" } */
+
+float func(double a)
+{
+  return (float)a;
+}
+
+/* { dg-final { scan-assembler "fdtos" } }*/
+
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fftoi_rm.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fftoi_rm.c
new file mode 100644
index 0000000..11c4f9d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fftoi_rm.c
@@ -0,0 +1,55 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "-ffast-math" } */
+
+int lfloor_float32 (float x)
+{
+  return __builtin_lfloorf (x);
+}
+
+int lfloor_float64 (double x)
+{
+  return __builtin_lfloor (x);
+}
+
+
+float floor_float32 (float x)
+{
+  return __builtin_floorf (x);
+}
+
+double floor_float64 (double x)
+{
+  return __builtin_floor (x);
+}
+
+/* { dg-final { scan-assembler "fftoi\.f32\.s32\.rni" } }*/
+/* { dg-final { scan-assembler "fftoi\.f64\.s32\.rni" } }*/
+/* { dg-final { scan-assembler "fftofi\.f32\.rni" } }*/
+/* { dg-final { scan-assembler "fftofi\.f64\.rni" } }*/
+
+int lceil_float32 (float x)
+{
+  return __builtin_lceilf (x);
+}
+
+int lceil_float64 (double x)
+{
+  return __builtin_lceil (x);
+}
+
+
+float ceil_float32 (float x)
+{
+  return __builtin_ceilf (x);
+}
+
+double ceil_float64 (double x)
+{
+  return __builtin_ceil (x);
+}
+
+/* { dg-final { scan-assembler "fftoi\.f32\.s32\.rpi" } }*/
+/* { dg-final { scan-assembler "fftoi\.f64\.s32\.rpi" } }*/
+/* { dg-final { scan-assembler "fftofi\.f32\.rpi" } }*/
+/* { dg-final { scan-assembler "fftofi\.f64\.rpi" } }*/
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fftoi_rz.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fftoi_rz.c
new file mode 100644
index 0000000..4b2990b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fftoi_rz.c
@@ -0,0 +1,41 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options " -mfpu=fpv3" } */
+
+int funce(__fp16 a)
+{
+  return (int)a;
+}
+
+unsigned int funcf(__fp16 a)
+{
+  return (unsigned int)a;
+}
+
+int funca(float a)
+{
+  return (int)a;
+}
+
+unsigned int funcb(float a)
+{
+  return (unsigned int)a;
+}
+
+int funcc(double a)
+{
+  return (int)a;
+}
+
+unsigned int funcd(double a)
+{
+  return (unsigned int)a;
+}
+
+/* { dg-final { scan-assembler "fftoi\.f16\.s32\.rz" } }*/
+/* { dg-final { scan-assembler "fftoi\.f16\.u32\.rz" } }*/
+/* { dg-final { scan-assembler "fftoi\.f32\.s32\.rz" } }*/
+/* { dg-final { scan-assembler "fftoi\.f32\.u32\.rz" } }*/
+/* { dg-final { scan-assembler "fftoi\.f64\.s32\.rz" } }*/
+/* { dg-final { scan-assembler "fftoi\.f64\.u32\.rz" } }*/
+
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fhtos.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fhtos.c
new file mode 100644
index 0000000..25fc542
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fhtos.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "-mfpu=fpv3" } */
+
+float func(__fp16 a)
+{
+  return (float)a;
+}
+
+/* { dg-final { scan-assembler "fhtos" } }*/
+
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fitof.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fitof.c
new file mode 100644
index 0000000..6a513dc
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fitof.c
@@ -0,0 +1,72 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "-mfpu=fpv3" } */
+
+__fp16 funce(int a)
+{
+  return (__fp16)a;
+}
+
+__fp16 funcf(unsigned int a)
+{
+  return (__fp16)a;
+}
+
+float funca(int a)
+{
+  return (float)a;
+}
+
+float funcb(unsigned int a)
+{
+  return (float)a;
+}
+
+double funcc(int a)
+{
+  return (double)a;
+}
+
+double funcd(unsigned int a)
+{
+  return (double)a;
+}
+
+//double funch(short a)
+//{
+//  return (double)a;
+//}
+//
+//double funci(unsigned short a)
+//{
+//  return (double)a;
+//}
+//
+//float funcj(short a)
+//{
+//  return (float)a;
+//}
+//
+//float funck(unsigned short a)
+//{
+//  return (float)a;
+//}
+
+__fp16 funcm(short a)
+{
+  return (__fp16)a;
+}
+
+__fp16 funcn(unsigned short a)
+{
+  return (__fp16)a;
+}
+
+/* { dg-final { scan-assembler "fitof\.s32\.f16" } }*/
+/* { dg-final { scan-assembler "fitof\.u32\.f16" } }*/
+/* { dg-final { scan-assembler "fitof\.s32\.f32" } }*/
+/* { dg-final { scan-assembler "fitof\.u32\.f32" } }*/
+/* { dg-final { scan-assembler "fitof\.s32\.f64" } }*/
+/* { dg-final { scan-assembler "fitof\.u32\.f64" } }*/
+/* { dg-final { scan-assembler "fitof\.s16\.f16" } }*/
+/* { dg-final { scan-assembler "fitof\.u16\.f16" } }*/
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fmov.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fmov.c
new file mode 100644
index 0000000..1aa87b1
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fmov.c
@@ -0,0 +1,96 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "-O2 -mfpu=fpv3" } */
+
+#define FUNC(i) func_ ## i
+
+#define FTYPE __fp16
+FTYPE FUNC(ld16) (FTYPE *a, FTYPE *b)
+{
+  return *a = *b;
+}
+
+/* { dg-final { scan-assembler "fld\.16" } }*/
+/* { dg-final { scan-assembler "fst\.16" } }*/
+
+#undef FTYPE
+#define FTYPE float
+FTYPE FUNC(ld32) (FTYPE *a, FTYPE *b)
+{
+  return *a = *b;
+}
+
+/* { dg-final { scan-assembler "fld\.32" } }*/
+/* { dg-final { scan-assembler "fld\.32" } }*/
+
+#undef FTYPE
+#define FTYPE double
+FTYPE FUNC(ld64) (FTYPE *a, FTYPE *b)
+{
+  return *a = *b;
+}
+
+/* { dg-final { scan-assembler "fld\.64" } }*/
+/* { dg-final { scan-assembler "fst\.64" } }*/
+
+
+#undef FTYPE
+#define FTYPE __fp16
+FTYPE FUNC(ldr16) (FTYPE *a, int i, FTYPE *b)
+{
+  return a[i] = b[i];
+}
+
+/* { dg-final { scan-assembler "fldr\.16" } }*/
+/* { dg-final { scan-assembler "fstr\.16" } }*/
+
+#undef FTYPE
+#define FTYPE float
+FTYPE FUNC(ldr32) (FTYPE *a, int i, FTYPE *b)
+{
+  return a[i] = b[i];
+}
+
+/* { dg-final { scan-assembler "fldr\.32" } }*/
+/* { dg-final { scan-assembler "fstr\.32" } }*/
+
+#undef FTYPE
+#define FTYPE double
+FTYPE FUNC(ldr64) (FTYPE *a, int i, FTYPE *b)
+{
+  return a[i] = b[i];
+}
+
+/* { dg-final { scan-assembler "fldr\.64" } }*/
+/* { dg-final { scan-assembler "fstr\.64" } }*/
+
+
+#undef FTYPE
+#define FTYPE __fp16
+FTYPE FUNC(mov16) (FTYPE a, FTYPE b)
+{
+  a = b;
+  return a;
+}
+
+/* { dg-final { scan-assembler "fmov\.16" } }*/
+
+#undef FTYPE
+#define FTYPE float
+FTYPE FUNC(mov32) (FTYPE a, FTYPE b)
+{
+  a = b;
+  return a;
+}
+
+/* { dg-final { scan-assembler "fmov\.32" } }*/
+
+#undef FTYPE
+#define FTYPE double
+FTYPE FUNC(mov64) (FTYPE a, FTYPE b)
+{
+  a = b;
+  return a;
+}
+
+/* { dg-final { scan-assembler "fmov\.64" } }*/
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fmovi.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fmovi.c
new file mode 100644
index 0000000..5fbc011
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fmovi.c
@@ -0,0 +1,31 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "-O2 -mfpu=fpv3" } */
+
+#define FUNC(i) func_ ## i
+
+#define FTYPE __fp16
+FTYPE FUNC(movi16) (void)
+{
+  return 1.0;
+}
+
+/* { dg-final { scan-assembler "fmovi\.16" } }*/
+
+#undef FTYPE
+#define FTYPE float
+FTYPE FUNC(movi32) (void)
+{
+  return 1.0;
+}
+
+/* { dg-final { scan-assembler "fmovi\.32" } }*/
+
+#undef FTYPE
+#define FTYPE double
+FTYPE FUNC(movi64) (void)
+{
+  return 1.0;
+}
+
+/* { dg-final { scan-assembler "fmovi\.64" } }*/
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fmula.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fmula.c
new file mode 100644
index 0000000..078ebc7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fmula.c
@@ -0,0 +1,23 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "-O2 -mfpu=fpv3" } */
+
+__fp16 func16(__fp16 a, __fp16 b, __fp16 c){
+  a += b * c;
+  return a;
+}
+
+float func32(float a, float b, float c){
+  a += b * c;
+  return a;
+}
+
+
+double func64(double a, double b, double c){
+  a += b * c;
+  return a;
+}
+
+/* { dg-final { scan-assembler "ffmula\.16" } }*/
+/* { dg-final { scan-assembler "ffmula\.32" } }*/
+/* { dg-final { scan-assembler "ffmula\.64" } }*/
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fmuls.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fmuls.c
new file mode 100644
index 0000000..efc80bc
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fmuls.c
@@ -0,0 +1,23 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "-O2 -mfpu=fpv3" } */
+
+__fp16 func16(__fp16 a, __fp16 b, __fp16 c){
+  a -= b * c;
+  return a;
+}
+
+float func32(float a, float b, float c){
+  a -= b * c;
+  return a;
+}
+
+
+double func64(double a, double b, double c){
+  a -= b * c;
+  return a;
+}
+
+/* { dg-final { scan-assembler "ffmuls\.16" } }*/
+/* { dg-final { scan-assembler "ffmuls\.32" } }*/
+/* { dg-final { scan-assembler "ffmuls\.64" } }*/
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fneg.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fneg.c
new file mode 100644
index 0000000..9941cf8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fneg.c
@@ -0,0 +1,22 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "-mfpu=fpv3" } */
+
+__fp16 func16(__fp16 a)
+{
+  return -a;
+}
+
+float func32(float a)
+{
+  return -a;
+}
+
+double func64(double a)
+{
+  return -a;
+}
+
+/* { dg-final { scan-assembler "fneg\.32" } }*/
+/* { dg-final { scan-assembler "fneg\.64" } }*/
+
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fnmula.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fnmula.c
new file mode 100644
index 0000000..6770d29
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fnmula.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "-O2" } */
+
+float fnmula32(float a, float b, float c){
+  return -(a + b * c);
+}
+
+double fnmula64(double a, double b, double c){
+  return -(a + b * c);
+}
+
+/* { dg-final { scan-assembler "ffnmula\.32" } }*/
+/* { dg-final { scan-assembler "ffnmula\.64" } }*/
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fnmuls.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fnmuls.c
new file mode 100644
index 0000000..86ba96b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fnmuls.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "-O2" } */
+
+float fnmula32(float a, float b, float c){
+  return -a + b * c;
+}
+
+double fnmula64(double a, double b, double c){
+  return -a + b * c;
+}
+
+/* { dg-final { scan-assembler "ffnmuls\.32" } }*/
+/* { dg-final { scan-assembler "ffnmuls\.64" } }*/
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fstod.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fstod.c
new file mode 100644
index 0000000..d4a615c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fstod.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "" } */
+
+double func(float a)
+{
+  return (double)a;
+}
+
+/* { dg-final { scan-assembler "fstod" } }*/
+
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fstoh.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fstoh.c
new file mode 100644
index 0000000..1333c41
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fstoh.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "-mfpu=fpv3" } */
+
+__fp16 func(float a)
+{
+  return (__fp16)a;
+}
+
+/* { dg-final { scan-assembler "fstoh" } }*/
+
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fsub.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fsub.c
new file mode 100644
index 0000000..914b2e6
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fsub.c
@@ -0,0 +1,23 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "-mfpu=fpv3" } */
+
+__fp16 funch(__fp16 a, __fp16 b)
+{
+  return a - b;
+}
+
+float funcs(float a, float b)
+{
+  return a - b;
+}
+
+double funcd(double a, double b)
+{
+  return a - b;
+}
+
+/* { dg-final { scan-assembler "fsub\.16" } }*/
+/* { dg-final { scan-assembler "fsub\.32" } }*/
+/* { dg-final { scan-assembler "fsub\.64" } }*/
+
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fxtof.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fxtof.c
new file mode 100644
index 0000000..d5182a7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fxtof.c
@@ -0,0 +1,76 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "-O1" } */
+
+//__fp16
+//fixed32_to_float16 (int i)
+//{
+//  return ((__fp16) i / (1 << 15));
+//}
+//
+//__fp16
+//fixedu32_to_float16 (unsigned int i)
+//{
+//  return ((__fp16) i / (1 << 15));
+//}
+//
+//float
+//fixed32_to_float32 (int i)
+//{
+//  return ((float) i / (1 << 30));
+//}
+//
+//
+//float
+//fixedu32_to_float32 (unsigned int i)
+//{
+//  return ((float) i / (1 << 30));
+//}
+//
+//double
+//fixed32_to_float64 (int i)
+//{
+//  return ((double) i / (1 << 30));
+//}
+//
+//double
+//fixedu32_to_float64 (unsigned int i)
+//{
+//  return ((double) i / (1 << 30));
+//}
+//
+//__fp16
+//fixed16_to_float16 (short i)
+//{
+//  return ((__fp16) i / (1 << 15));
+//}
+//
+//__fp16
+//fixedu16_to_float16 (unsigned short i)
+//{
+//  return ((__fp16) i / (1 << 15));
+//}
+//
+//float
+//fixed16_to_float32 (short i)
+//{
+//  return ((float) i / (1 << 16));
+//}
+//
+//float
+//fixedu16_to_float32 (unsigned short i)
+//{
+//  return ((float) i / (1 << 16));
+//}
+//
+//double
+//fixed16_to_float64 (short i)
+//{
+//  return ((double) i / (1 << 16));
+//}
+//
+//double
+//fixedu16_to_float64 (unsigned short i)
+//{
+//  return ((double) i / (1 << 16));
+//}
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_h.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_h.c
new file mode 100644
index 0000000..c2e76d0
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_h.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "" } */
+
+float fh32(float a, float b, float c, float d){
+  if(a > b)
+    return c;
+
+  return d;
+}
+
+double fh64(double a, double b, double c, double d){
+  if( a > b)
+    return c;
+  return d;
+}
+
+/* { dg-final { scan-assembler "fcmplt\.32" } }*/
+/* { dg-final { scan-assembler "fcmplt\.64" } }*/
+
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_hs.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_hs.c
new file mode 100644
index 0000000..ecfaa63
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_hs.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "" } */
+
+float fhs32(float a, float b, float c, float d){
+  if(a >= b)
+    return c;
+  return d;
+}
+
+double fhs64(double a, double b, double c, double d){
+  if( a >= b)
+    return c;
+  return d;
+}
+
+/* { dg-final { scan-assembler "fcmphs\.32" } }*/
+/* { dg-final { scan-assembler "fcmphs\.64" } }*/
+
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_hsz.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_hsz.c
new file mode 100644
index 0000000..530a4be
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_hsz.c
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "" } */
+
+float fhsz32(float a, float b, float c){
+  if(a >= 0.0f)
+    return b;
+  else
+    return c;
+}
+
+double fhsz64(double a, double b, double c){
+  if( a >= 0.0)
+    return b;
+  else
+    return c;
+}
+
+/* { dg-final { scan-assembler "fcmphsz\.32" } }*/
+/* { dg-final { scan-assembler "fcmphsz\.64" } }*/
+
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_hz.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_hz.c
new file mode 100644
index 0000000..a2a8d8f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_hz.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "-O2" } */
+
+float fhz32(float a, float b, float c){
+  if(a > 0.0f)
+    return b;
+  else
+    return c;
+}
+
+double fhz64(double a, double b, double c){
+  if( a > 0.0)
+    return b;
+  else
+    return c;
+}
+
+/* { dg-final { scan-assembler "fcmphz\.32" } }*/
+/* { dg-final { scan-assembler "fcmphz\.64" } }*/
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_ls.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_ls.c
new file mode 100644
index 0000000..3bb6ac6
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_ls.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "-O2" } */
+
+float fls32(float a, float b, float c, float d){
+  if(a <= b)
+    return c;
+
+  return d;
+}
+
+double fhz64(double a, double b, double c, double d){
+  if( a <= b)
+    return c;
+  return d;
+}
+
+/* { dg-final { scan-assembler "fcmphs\.32" } }*/
+/* { dg-final { scan-assembler "fcmphs\.64" } }*/
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_lsz.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_lsz.c
new file mode 100644
index 0000000..6e19efa
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_lsz.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "-O2" } */
+
+float flsz32(float a, float b, float c){
+  if(a <= 0.0f)
+    return b;
+  else
+    return c;
+}
+
+double fhz64(double a, double b, double c){
+  if( a <= 0.0)
+    return b;
+  else
+    return c;
+}
+
+/* { dg-final { scan-assembler "fcmplsz\.32" } }*/
+/* { dg-final { scan-assembler "fcmplsz\.64" } }*/
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_lt.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_lt.c
new file mode 100644
index 0000000..e4a716f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_lt.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "" } */
+
+float flt32(float a, float b, float c, float d){
+  if(a < b)
+    return c;
+  return d;
+}
+
+double flt64(double a, double b, double c, double d){
+  if( a < b)
+    return c;
+  return d;
+}
+
+/* { dg-final { scan-assembler "fcmplt\.32" } }*/
+/* { dg-final { scan-assembler "fcmplt\.64" } }*/
+
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_ltz.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_ltz.c
new file mode 100644
index 0000000..984079c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_ltz.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "-O2" } */
+
+float fltz32(float a, float b, float c){
+  if(a < 0.0f)
+    return b;
+  else
+    return c;
+}
+
+double fltz64(double a, double b, double c){
+  if( a < 0.0)
+    return b;
+  else
+    return c;
+}
+
+/* { dg-final { scan-assembler "fcmpltz\.32" } }*/
+/* { dg-final { scan-assembler "fcmpltz\.64" } }*/
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_max.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_max.c
new file mode 100644
index 0000000..32fb74e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_max.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "-O2" } */
+
+extern float fmaxf( float x, float y );
+float fmax32(float a, float b){
+  return fmaxf(a, b);
+}
+
+extern double fmax( double x, double y );
+double fmax64(double a, double b){
+  return fmax(a, b);
+}
+
+/* { dg-final { scan-assembler "fmaxnm\.32" } }*/
+/* { dg-final { scan-assembler "fmaxnm\.64" } }*/
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_min.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_min.c
new file mode 100644
index 0000000..95c0878
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_min.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "-O2" } */
+
+extern float fminf( float x, float y );
+float fmin32(float a, float b){
+  return fminf(a, b);
+}
+
+extern double fmin( double x, double y );
+double fmin64(double a, double b){
+  return fmin(a, b);
+}
+
+/* { dg-final { scan-assembler "fminnm\.32" } }*/
+/* { dg-final { scan-assembler "fminnm\.64" } }*/
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_mul.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_mul.c
new file mode 100644
index 0000000..a168dc7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_mul.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "" } */
+
+float mul32(float a, float b){
+  return a*b;
+}
+
+double mul64(double a, double b){
+  return a*b;
+}
+
+/* { dg-final { scan-assembler "fmul\.32" } }*/
+/* { dg-final { scan-assembler "fmul\.64" } }*/
+
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_mula.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_mula.c
new file mode 100644
index 0000000..f78534e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_mula.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "-O2" } */
+
+float func32(float a, float b, float c){
+  a += b * c;
+  return a;
+}
+
+double func64(double a, double b, double c){
+  a += b * c;
+  return a;
+}
+
+/* { dg-final { scan-assembler "fmula\.32" } }*/
+/* { dg-final { scan-assembler "fmula\.64" } }*/
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_muls.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_muls.c
new file mode 100644
index 0000000..f144e45
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_muls.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "-O2" } */
+
+float muls32(float a, float b, float c){
+  a -= b * c;
+  return a;
+}
+
+double muls64(double a, double b, double c){
+  a -= b * c;
+  return a;
+}
+
+/* { dg-final { scan-assembler "fmuls\.32" } }*/
+/* { dg-final { scan-assembler "fmuls\.64" } }*/
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_ne.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_ne.c
new file mode 100644
index 0000000..c24f0ce
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_ne.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "" } */
+
+float fne32(float a, float b, float c, float d){
+  if(a != b)
+    return c;
+  return d;
+}
+
+double fne64(double a, double b, double c, double d){
+  if( a != b)
+    return c;
+  return d;
+}
+
+/* { dg-final { scan-assembler "fcmpne\.32" } }*/
+/* { dg-final { scan-assembler "fcmpne\.64" } }*/
+
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_nez.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_nez.c
new file mode 100644
index 0000000..348211d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_nez.c
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "" } */
+
+float fnez32(float a, float b, float c){
+  if(a != 0.0f)
+    return b;
+  else
+    return c;
+}
+
+double fnez64(double a, double b, double c){
+  if( a != 0.0)
+    return b;
+  else
+    return c;
+}
+
+/* { dg-final { scan-assembler "fcmpnez\.32" } }*/
+/* { dg-final { scan-assembler "fcmpnez\.64" } }*/
+
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_recip.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_recip.c
new file mode 100644
index 0000000..cadd367
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_recip.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "" } */
+
+float recip32(float a){
+  return 1.0f/a;
+}
+
+double recip64(double a){
+  return 1.0/a;
+}
+
+/* { dg-final { scan-assembler "frecip\.32" } }*/
+/* { dg-final { scan-assembler "frecip\.64" } }*/
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_sqrt.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_sqrt.c
new file mode 100644
index 0000000..4d79900
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_sqrt.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "-O2" } */
+
+float sqrtf(float);
+float sqrt32(float a){
+  return sqrtf(a);
+}
+
+double sqrt(double);
+double sqrt64(double a){
+  return sqrt(a);
+}
+
+/* { dg-final { scan-assembler "fsqrt\.32" } }*/
+/* { dg-final { scan-assembler "fsqrt\.64" } }*/
diff --git a/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_unordered.c b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_unordered.c
new file mode 100644
index 0000000..3539eb4
--- /dev/null
+++ b/gcc/testsuite/gcc.target/csky/fpuv3/fpv3_unordered.c
@@ -0,0 +1,29 @@
+/* { dg-do compile } */
+/* { dg-skip-if  "test is specific to ck860f"  { csky-*-* }  { "*" }  { "-mcpu=ck860*f* -mfloat-abi=hard" "-mcpu=ck860*f* -mhard-float"  }  }  */
+/* { dg-options "-O2" } */
+
+int func32(float a, float b)
+{
+  return __builtin_isunordered(a, b);
+}
+
+int func64(double a, double b)
+{
+  return __builtin_isunordered(a, b);
+}
+
+/* { dg-final { scan-assembler "fcmpuo\.32" } }*/
+/* { dg-final { scan-assembler "fcmpuo\.64" } }*/
+
+int func32z(float a)
+{
+  return __builtin_isunordered(a, 0);
+}
+
+int func64z(double a)
+{
+  return __builtin_isunordered(a, 0);
+}
+
+/* { dg-final { scan-assembler "fcmpuoz\.32" } }*/
+/* { dg-final { scan-assembler "fcmpuoz\.64" } }*/
-- 
2.7.4


  parent reply	other threads:[~2020-10-29 13:24 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-29 13:22 [PATCH 1/7] C-SKY: Add fpuv3 instructions and CK860 arch gengqi
2020-10-29 13:22 ` [PATCH 2/7] C-SKY: Delete LO_REGS and HI_REGS, use HILO_REGS instead gengqi
2020-10-29 13:22 ` [PATCH 3/7] C-SKY: Bug fix for bad setting of TARGET_DSP and TARGET_DIV gengqi
2020-10-29 13:23 ` [PATCH 4/7] C-SKY: Separate FRAME_POINTER_REGNUM into FRAME_POINTER_REGNUM and HARD_FRAME_POINTER_REGNUM gengqi
2020-10-29 13:23 ` [PATCH 5/7] C-SKY: Add insn "ldbs" gengqi
2020-10-29 13:23 ` gengqi [this message]
2020-10-30  3:28 ` [PATCH 1/7] C-SKY: Add fpuv3 instructions and CK860 arch Cooper Qu
2020-11-13 19:14   ` Jeff Law

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201029132302.1616-6-gengqi@linux.alibaba.com \
    --to=gengqi@linux.alibaba.com \
    --cc=gcc-patches@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).