aboutsummaryrefslogtreecommitdiff
path: root/gcc/builtins.c
diff options
context:
space:
mode:
authorKaveh R. Ghazi <ghazi@caip.rutgers.edu>2009-10-14 01:14:53 +0000
committerKaveh Ghazi <ghazi@gcc.gnu.org>2009-10-14 01:14:53 +0000
commit7610abd8cbb3c9f75a88b90196e9bb207aff09db (patch)
treeef482df1dbca9c07d51e39903d45c94ad89f9fc5 /gcc/builtins.c
parent1cc245760cde1a2488b2e4e4d892cdeeb07a4d7f (diff)
downloadgcc-7610abd8cbb3c9f75a88b90196e9bb207aff09db.zip
gcc-7610abd8cbb3c9f75a88b90196e9bb207aff09db.tar.gz
gcc-7610abd8cbb3c9f75a88b90196e9bb207aff09db.tar.bz2
builtins.c (fold_builtin_1): Support complex "arc" functions.
* builtins.c (fold_builtin_1): Support complex "arc" functions. * real.h (HAVE_mpc_arc): Define. testsuite: * gcc.dg/torture/builtin-math-6.c: Test complex "arc" functions. * lib/target-supports.exp (check_effective_target_mpc_arc): New. From-SVN: r152746
Diffstat (limited to 'gcc/builtins.c')
-rw-r--r--gcc/builtins.c40
1 files changed, 39 insertions, 1 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 55228d2..d991408 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -10063,7 +10063,45 @@ fold_builtin_1 (location_t loc, tree fndecl, tree arg0, bool ignore)
&& TREE_CODE (TREE_TYPE (TREE_TYPE (arg0))) == REAL_TYPE)
return do_mpc_arg1 (arg0, type, mpc_sqrt);
break;
-#endif
+
+#ifdef HAVE_mpc_arc
+ CASE_FLT_FN (BUILT_IN_CASIN):
+ if (validate_arg (arg0, COMPLEX_TYPE)
+ && TREE_CODE (TREE_TYPE (TREE_TYPE (arg0))) == REAL_TYPE)
+ return do_mpc_arg1 (arg0, type, mpc_asin);
+ break;
+
+ CASE_FLT_FN (BUILT_IN_CACOS):
+ if (validate_arg (arg0, COMPLEX_TYPE)
+ && TREE_CODE (TREE_TYPE (TREE_TYPE (arg0))) == REAL_TYPE)
+ return do_mpc_arg1 (arg0, type, mpc_acos);
+ break;
+
+ CASE_FLT_FN (BUILT_IN_CATAN):
+ if (validate_arg (arg0, COMPLEX_TYPE)
+ && TREE_CODE (TREE_TYPE (TREE_TYPE (arg0))) == REAL_TYPE)
+ return do_mpc_arg1 (arg0, type, mpc_atan);
+ break;
+
+ CASE_FLT_FN (BUILT_IN_CASINH):
+ if (validate_arg (arg0, COMPLEX_TYPE)
+ && TREE_CODE (TREE_TYPE (TREE_TYPE (arg0))) == REAL_TYPE)
+ return do_mpc_arg1 (arg0, type, mpc_asinh);
+ break;
+
+ CASE_FLT_FN (BUILT_IN_CACOSH):
+ if (validate_arg (arg0, COMPLEX_TYPE)
+ && TREE_CODE (TREE_TYPE (TREE_TYPE (arg0))) == REAL_TYPE)
+ return do_mpc_arg1 (arg0, type, mpc_acosh);
+ break;
+
+ CASE_FLT_FN (BUILT_IN_CATANH):
+ if (validate_arg (arg0, COMPLEX_TYPE)
+ && TREE_CODE (TREE_TYPE (TREE_TYPE (arg0))) == REAL_TYPE)
+ return do_mpc_arg1 (arg0, type, mpc_atanh);
+ break;
+#endif /* HAVE_mpc_arc */
+#endif /* HAVE_mpc */
CASE_FLT_FN (BUILT_IN_CABS):
return fold_builtin_cabs (loc, arg0, type, fndecl);