Patch to add declarations for many (most?) math builtins

Kaveh R. Ghazi ghazi@caip.rutgers.edu
Wed Jul 30 16:46:00 GMT 2003


The ISO C math functions might as well all be declared so that the
appropriate attributes are set on these functions.  (Actually IMHO
*all* ISO C functions should be predeclared like what g++ does with
cp/cfns.gperf.  But I'll start with these math ones.)

I'd like special attention paid to my choices of DEF_LIB_BUILTIN vs
DEF_C99_C90RES_BUILTIN vs DEF_C99_BUILTIN.  Some of these were guesses
on my part.  And I probably missed some math functions, feel free to
suggest more and I'll include them in a follow-up patch.

Also, while writing the new testcase I may have uncovered a bug in the
declaration of ffsl.  Currently we only get __builtin_ffsl, not ffsl.
The other two (ffs, ffsll) declare the plain function and the
__builtin_ one.  I don't know if this omission is because ffsl
conflicted with someone's system header, or if it was a simple error.
I changed it to declare ffsl like the other two builtins do.

Bootstrapped on sparc-sun-solaris2.7 (minus java) no regressions and
all testcase additions pass, including the one testing for the `const'
attribute on the functions.

Ok for mainline?

		Thanks,
		--Kaveh


2003-07-30  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* builtin-types.def (BT_FN_LONG_DOUBLE_LONG_DOUBLE_INT,
	BT_FN_DOUBLE_DOUBLE_INT, BT_FN_FLOAT_FLOAT_INT): New.
	
	* builtins.def (BUILT_IN_FFSL): Fix declaration to be
	DEF_EXT_LIB_BUILTIN.
	(BUILT_IN_CBRT, BUILT_IN_HYPOT, BUILT_IN_LDEXP, BUILT_IN_SINH,
	BUILT_IN_COSH, BUILT_IN_ASINH, BUILT_IN_ACOSH, BUILT_IN_ASIN,
	BUILT_IN_ACOS, BUILT_IN_LOG10, BUILT_IN_TANH, BUILT_IN_ATANH,
	BUILT_IN_CBRTF, BUILT_IN_HYPOTF, BUILT_IN_LDEXPF, BUILT_IN_SINHF,
	BUILT_IN_COSHF, BUILT_IN_ASINHF, BUILT_IN_ACOSHF, BUILT_IN_ASINF,
	BUILT_IN_ACOSF, BUILT_IN_LOG10F, BUILT_IN_TANHF, BUILT_IN_ATANHF,
	BUILT_IN_CBRTL, BUILT_IN_HYPOTL, BUILT_IN_LDEXPL, BUILT_IN_SINHL,
	BUILT_IN_COSHL, BUILT_IN_ASINHL, BUILT_IN_ACOSHL, BUILT_IN_ASINL,
	BUILT_IN_ACOSL, BUILT_IN_LOG10L, BUILT_IN_TANHL, BUILT_IN_ATANHL):
	New builtins.

testsuite:
	* gcc.dg/builtins-1.c: Update with new builtins.
	* gcc.dg/builtins-4.c: Likewise.
	* gcc.dg/builtins-27.c: New testcase for `const' attribute on
	builtins.

diff -rup orig/egcc-CVS20030729/gcc/builtin-types.def egcc-CVS20030729/gcc/builtin-types.def
--- orig/egcc-CVS20030729/gcc/builtin-types.def	2003-04-28 10:00:19.000000000 -0400
+++ egcc-CVS20030729/gcc/builtin-types.def	2003-07-30 06:38:36.606827000 -0400
@@ -157,6 +157,12 @@ DEF_FUNCTION_TYPE_2 (BT_FN_DOUBLE_DOUBLE
 		     BT_DOUBLE, BT_DOUBLE, BT_DOUBLE)
 DEF_FUNCTION_TYPE_2 (BT_FN_LONG_DOUBLE_LONG_DOUBLE_LONG_DOUBLE,
 		     BT_LONG_DOUBLE, BT_LONG_DOUBLE, BT_LONG_DOUBLE)
+DEF_FUNCTION_TYPE_2 (BT_FN_FLOAT_FLOAT_INT,
+		     BT_FLOAT, BT_FLOAT, BT_INT)
+DEF_FUNCTION_TYPE_2 (BT_FN_DOUBLE_DOUBLE_INT,
+		     BT_DOUBLE, BT_DOUBLE, BT_INT)
+DEF_FUNCTION_TYPE_2 (BT_FN_LONG_DOUBLE_LONG_DOUBLE_INT,
+		     BT_LONG_DOUBLE, BT_LONG_DOUBLE, BT_INT)
 DEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_STRING_VALIST_ARG,
 		     BT_INT, BT_CONST_STRING, BT_VALIST_ARG)
 DEF_FUNCTION_TYPE_2 (BT_FN_PTR_SIZE_SIZE,
diff -rup orig/egcc-CVS20030729/gcc/builtins.def egcc-CVS20030729/gcc/builtins.def
--- orig/egcc-CVS20030729/gcc/builtins.def	2003-07-26 20:00:59.000000000 -0400
+++ egcc-CVS20030729/gcc/builtins.def	2003-07-30 08:26:04.544675000 -0400
@@ -291,7 +291,7 @@ DEF_GCC_BUILTIN(BUILT_IN_PARITY,
 		    BT_FN_INT_INT,
 		    ATTR_CONST_NOTHROW_LIST)
 
-DEF_GCC_BUILTIN(BUILT_IN_FFSL,
+DEF_EXT_LIB_BUILTIN(BUILT_IN_FFSL,
 		    "__builtin_ffsl",
 		    BT_FN_INT_LONG,
 		    ATTR_CONST_NOTHROW_LIST)
@@ -427,6 +427,53 @@ DEF_LIB_BUILTIN(BUILT_IN_SQRT,
 				: (flag_unsafe_math_optimizations
 				   ? ATTR_CONST_NOTHROW_LIST
 				   : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_BUILTIN(BUILT_IN_CBRT,
+		"__builtin_cbrt",
+		BT_FN_DOUBLE_DOUBLE,
+		flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
+					       : ATTR_PURE_NOTHROW_LIST)
+DEF_C99_BUILTIN(BUILT_IN_HYPOT,
+		"__builtin_hypot",
+		BT_FN_DOUBLE_DOUBLE_DOUBLE,
+		flag_errno_math ? ATTR_NOTHROW_LIST
+				: (flag_unsafe_math_optimizations
+				   ? ATTR_CONST_NOTHROW_LIST
+				   : ATTR_PURE_NOTHROW_LIST))
+DEF_LIB_BUILTIN(BUILT_IN_LDEXP,
+		"__builtin_ldexp",
+		BT_FN_DOUBLE_DOUBLE_INT,
+		flag_errno_math ? ATTR_NOTHROW_LIST
+				: (flag_unsafe_math_optimizations
+				   ? ATTR_CONST_NOTHROW_LIST
+				   : ATTR_PURE_NOTHROW_LIST))
+DEF_LIB_BUILTIN(BUILT_IN_SINH,
+		"__builtin_sinh",
+		BT_FN_DOUBLE_DOUBLE,
+		flag_errno_math ? ATTR_NOTHROW_LIST
+				: (flag_unsafe_math_optimizations
+				   ? ATTR_CONST_NOTHROW_LIST
+				   : ATTR_PURE_NOTHROW_LIST))
+DEF_LIB_BUILTIN(BUILT_IN_COSH,
+		"__builtin_cosh",
+		BT_FN_DOUBLE_DOUBLE,
+		flag_errno_math ? ATTR_NOTHROW_LIST
+				: (flag_unsafe_math_optimizations
+				   ? ATTR_CONST_NOTHROW_LIST
+				   : ATTR_PURE_NOTHROW_LIST))
+DEF_LIB_BUILTIN(BUILT_IN_ASINH,
+		"__builtin_asinh",
+		BT_FN_DOUBLE_DOUBLE,
+		flag_errno_math ? ATTR_NOTHROW_LIST
+				: (flag_unsafe_math_optimizations
+				   ? ATTR_CONST_NOTHROW_LIST
+				   : ATTR_PURE_NOTHROW_LIST))
+DEF_LIB_BUILTIN(BUILT_IN_ACOSH,
+		"__builtin_acosh",
+		BT_FN_DOUBLE_DOUBLE,
+		flag_errno_math ? ATTR_NOTHROW_LIST
+				: (flag_unsafe_math_optimizations
+				   ? ATTR_CONST_NOTHROW_LIST
+				   : ATTR_PURE_NOTHROW_LIST))
 DEF_LIB_BUILTIN(BUILT_IN_SIN,
 		"__builtin_sin",
 		BT_FN_DOUBLE_DOUBLE,
@@ -437,6 +484,20 @@ DEF_LIB_BUILTIN(BUILT_IN_COS,
 		BT_FN_DOUBLE_DOUBLE,
 		flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
 					       : ATTR_PURE_NOTHROW_LIST)
+DEF_LIB_BUILTIN(BUILT_IN_ASIN,
+		"__builtin_asin",
+		BT_FN_DOUBLE_DOUBLE,
+		flag_errno_math ? ATTR_NOTHROW_LIST
+				: (flag_unsafe_math_optimizations
+				   ? ATTR_CONST_NOTHROW_LIST
+				   : ATTR_PURE_NOTHROW_LIST))
+DEF_LIB_BUILTIN(BUILT_IN_ACOS,
+		"__builtin_acos",
+		BT_FN_DOUBLE_DOUBLE,
+		flag_errno_math ? ATTR_NOTHROW_LIST
+				: (flag_unsafe_math_optimizations
+				   ? ATTR_CONST_NOTHROW_LIST
+				   : ATTR_PURE_NOTHROW_LIST))
 DEF_LIB_BUILTIN(BUILT_IN_EXP,
 		"__builtin_exp",
 		BT_FN_DOUBLE_DOUBLE,
@@ -451,6 +512,23 @@ DEF_LIB_BUILTIN(BUILT_IN_LOG,
 				: (flag_unsafe_math_optimizations
 				   ? ATTR_CONST_NOTHROW_LIST
 				   : ATTR_PURE_NOTHROW_LIST))
+DEF_LIB_BUILTIN(BUILT_IN_LOG10,
+		"__builtin_log10",
+		BT_FN_DOUBLE_DOUBLE,
+		flag_errno_math ? ATTR_NOTHROW_LIST
+				: (flag_unsafe_math_optimizations
+				   ? ATTR_CONST_NOTHROW_LIST
+				   : ATTR_PURE_NOTHROW_LIST))
+DEF_LIB_BUILTIN(BUILT_IN_TANH,
+		"__builtin_tanh",
+		BT_FN_DOUBLE_DOUBLE,
+		flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
+					       : ATTR_PURE_NOTHROW_LIST)
+DEF_LIB_BUILTIN(BUILT_IN_ATANH,
+		"__builtin_atanh",
+		BT_FN_DOUBLE_DOUBLE,
+		flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
+					       : ATTR_PURE_NOTHROW_LIST)
 DEF_LIB_BUILTIN(BUILT_IN_TAN,
 		"__builtin_tan",
 		BT_FN_DOUBLE_DOUBLE,
@@ -489,6 +567,53 @@ DEF_C99_C90RES_BUILTIN(BUILT_IN_SQRTF,
 				       : (flag_unsafe_math_optimizations
 					  ? ATTR_CONST_NOTHROW_LIST
 					  : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_BUILTIN(BUILT_IN_CBRTF,
+		"__builtin_cbrtf",
+		BT_FN_FLOAT_FLOAT,
+		flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
+					       : ATTR_PURE_NOTHROW_LIST)
+DEF_C99_BUILTIN(BUILT_IN_HYPOTF,
+		"__builtin_hypotf",
+		BT_FN_FLOAT_FLOAT_FLOAT,
+		flag_errno_math ? ATTR_NOTHROW_LIST
+			       : (flag_unsafe_math_optimizations
+				  ? ATTR_CONST_NOTHROW_LIST
+				  : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_LDEXPF,
+		"__builtin_ldexpf",
+		BT_FN_FLOAT_FLOAT_INT,
+		       flag_errno_math ? ATTR_NOTHROW_LIST
+				       : (flag_unsafe_math_optimizations
+					  ? ATTR_CONST_NOTHROW_LIST
+					  : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_SINHF,
+		       "__builtin_sinhf",
+		       BT_FN_FLOAT_FLOAT,
+		       flag_errno_math ? ATTR_NOTHROW_LIST
+				       : (flag_unsafe_math_optimizations
+					  ? ATTR_CONST_NOTHROW_LIST
+					  : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_COSHF,
+		       "__builtin_coshf",
+		       BT_FN_FLOAT_FLOAT,
+		       flag_errno_math ? ATTR_NOTHROW_LIST
+				       : (flag_unsafe_math_optimizations
+					  ? ATTR_CONST_NOTHROW_LIST
+					  : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_ASINHF,
+		       "__builtin_asinhf",
+		       BT_FN_FLOAT_FLOAT,
+		       flag_errno_math ? ATTR_NOTHROW_LIST
+				       : (flag_unsafe_math_optimizations
+					  ? ATTR_CONST_NOTHROW_LIST
+					  : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_ACOSHF,
+		       "__builtin_acoshf",
+		       BT_FN_FLOAT_FLOAT,
+		       flag_errno_math ? ATTR_NOTHROW_LIST
+				       : (flag_unsafe_math_optimizations
+					  ? ATTR_CONST_NOTHROW_LIST
+					  : ATTR_PURE_NOTHROW_LIST))
 DEF_C99_C90RES_BUILTIN(BUILT_IN_SINF,
 		       "__builtin_sinf",
 		       BT_FN_FLOAT_FLOAT,
@@ -499,6 +624,20 @@ DEF_C99_C90RES_BUILTIN(BUILT_IN_COSF,
 		       BT_FN_FLOAT_FLOAT,
 		       flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
 						      : ATTR_PURE_NOTHROW_LIST)
+DEF_C99_C90RES_BUILTIN(BUILT_IN_ASINF,
+		       "__builtin_asinf",
+		       BT_FN_FLOAT_FLOAT,
+		       flag_errno_math ? ATTR_NOTHROW_LIST
+				       : (flag_unsafe_math_optimizations
+					  ? ATTR_CONST_NOTHROW_LIST
+					  : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_ACOSF,
+		       "__builtin_acosf",
+		       BT_FN_FLOAT_FLOAT,
+		       flag_errno_math ? ATTR_NOTHROW_LIST
+				       : (flag_unsafe_math_optimizations
+					  ? ATTR_CONST_NOTHROW_LIST
+					  : ATTR_PURE_NOTHROW_LIST))
 DEF_C99_C90RES_BUILTIN(BUILT_IN_EXPF,
 		       "__builtin_expf",
 		       BT_FN_FLOAT_FLOAT,
@@ -513,6 +652,23 @@ DEF_C99_C90RES_BUILTIN(BUILT_IN_LOGF,
 				       : (flag_unsafe_math_optimizations
 					  ? ATTR_CONST_NOTHROW_LIST
 					  : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_LOG10F,
+		       "__builtin_log10f",
+		       BT_FN_FLOAT_FLOAT,
+		       flag_errno_math ? ATTR_NOTHROW_LIST
+				       : (flag_unsafe_math_optimizations
+					  ? ATTR_CONST_NOTHROW_LIST
+					  : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_TANHF,
+		       "__builtin_tanhf",
+		       BT_FN_FLOAT_FLOAT,
+		       flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
+						      : ATTR_PURE_NOTHROW_LIST)
+DEF_C99_C90RES_BUILTIN(BUILT_IN_ATANHF,
+		       "__builtin_atanhf",
+		       BT_FN_FLOAT_FLOAT,
+		       flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
+						      : ATTR_PURE_NOTHROW_LIST)
 DEF_C99_C90RES_BUILTIN(BUILT_IN_TANF,
 		       "__builtin_tanf",
 		       BT_FN_FLOAT_FLOAT,
@@ -551,6 +707,53 @@ DEF_C99_C90RES_BUILTIN(BUILT_IN_SQRTL,
 				       : (flag_unsafe_math_optimizations
 					  ? ATTR_CONST_NOTHROW_LIST
 					  : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_BUILTIN(BUILT_IN_CBRTL,
+		"__builtin_cbrtl",
+		BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+		flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
+					       : ATTR_PURE_NOTHROW_LIST)
+DEF_C99_BUILTIN(BUILT_IN_HYPOTL,
+		"__builtin_hypotl",
+		BT_FN_LONG_DOUBLE_LONG_DOUBLE_LONG_DOUBLE,
+		flag_errno_math ? ATTR_NOTHROW_LIST
+		       : (flag_unsafe_math_optimizations
+			  ? ATTR_CONST_NOTHROW_LIST
+			  : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_LDEXPL,
+		       "__builtin_ldexpl",
+		       BT_FN_LONG_DOUBLE_LONG_DOUBLE_INT,
+		       flag_errno_math ? ATTR_NOTHROW_LIST
+		       : (flag_unsafe_math_optimizations
+			  ? ATTR_CONST_NOTHROW_LIST
+			  : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_SINHL,
+		       "__builtin_sinhl",
+		       BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+		       flag_errno_math ? ATTR_NOTHROW_LIST
+		       : (flag_unsafe_math_optimizations
+			  ? ATTR_CONST_NOTHROW_LIST
+			  : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_COSHL,
+		       "__builtin_coshl",
+		       BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+		       flag_errno_math ? ATTR_NOTHROW_LIST
+		       : (flag_unsafe_math_optimizations
+			  ? ATTR_CONST_NOTHROW_LIST
+			  : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_ASINHL,
+		       "__builtin_asinhl",
+		       BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+		       flag_errno_math ? ATTR_NOTHROW_LIST
+		       : (flag_unsafe_math_optimizations
+			  ? ATTR_CONST_NOTHROW_LIST
+			  : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_ACOSHL,
+		       "__builtin_acoshl",
+		       BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+		       flag_errno_math ? ATTR_NOTHROW_LIST
+		       : (flag_unsafe_math_optimizations
+			  ? ATTR_CONST_NOTHROW_LIST
+			  : ATTR_PURE_NOTHROW_LIST))
 DEF_C99_C90RES_BUILTIN(BUILT_IN_SINL,
 		       "__builtin_sinl",
 		       BT_FN_LONG_DOUBLE_LONG_DOUBLE,
@@ -561,6 +764,20 @@ DEF_C99_C90RES_BUILTIN(BUILT_IN_COSL,
 		       BT_FN_LONG_DOUBLE_LONG_DOUBLE,
 		       flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
 						      : ATTR_PURE_NOTHROW_LIST)
+DEF_C99_C90RES_BUILTIN(BUILT_IN_ASINL,
+		       "__builtin_asinl",
+		       BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+		       flag_errno_math ? ATTR_NOTHROW_LIST
+		       : (flag_unsafe_math_optimizations
+			  ? ATTR_CONST_NOTHROW_LIST
+			  : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_ACOSL,
+		       "__builtin_acosl",
+		       BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+		       flag_errno_math ? ATTR_NOTHROW_LIST
+		       : (flag_unsafe_math_optimizations
+			  ? ATTR_CONST_NOTHROW_LIST
+			  : ATTR_PURE_NOTHROW_LIST))
 DEF_C99_C90RES_BUILTIN(BUILT_IN_EXPL,
 		       "__builtin_expl",
 		       BT_FN_LONG_DOUBLE_LONG_DOUBLE,
@@ -575,6 +792,23 @@ DEF_C99_C90RES_BUILTIN(BUILT_IN_LOGL,
 				       : (flag_unsafe_math_optimizations
 					  ? ATTR_CONST_NOTHROW_LIST
 					  : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_LOG10L,
+		       "__builtin_log10l",
+		       BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+		       flag_errno_math ? ATTR_NOTHROW_LIST
+				       : (flag_unsafe_math_optimizations
+					  ? ATTR_CONST_NOTHROW_LIST
+					  : ATTR_PURE_NOTHROW_LIST))
+DEF_C99_C90RES_BUILTIN(BUILT_IN_TANHL,
+		       "__builtin_tanhl",
+		       BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+		       flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
+						      : ATTR_PURE_NOTHROW_LIST)
+DEF_C99_C90RES_BUILTIN(BUILT_IN_ATANHL,
+		       "__builtin_atanhl",
+		       BT_FN_LONG_DOUBLE_LONG_DOUBLE,
+		       flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST
+						      : ATTR_PURE_NOTHROW_LIST)
 DEF_C99_C90RES_BUILTIN(BUILT_IN_TANL,
 		       "__builtin_tanl",
 		       BT_FN_LONG_DOUBLE_LONG_DOUBLE,
diff -rup orig/egcc-CVS20030729/gcc/testsuite/gcc.dg/builtins-1.c egcc-CVS20030729/gcc/testsuite/gcc.dg/builtins-1.c
--- orig/egcc-CVS20030729/gcc/testsuite/gcc.dg/builtins-1.c	2003-05-23 20:01:58.000000000 -0400
+++ egcc-CVS20030729/gcc/testsuite/gcc.dg/builtins-1.c	2003-07-30 09:05:55.458706000 -0400
@@ -15,6 +15,16 @@ double test4(double x) { return __builti
 double test5(double x) { return __builtin_log(x); }
 double test6(double x) { return __builtin_tan(x); }
 double test7(double x) { return __builtin_atan(x); }
+double test8(double x) { return __builtin_cbrt(x); }
+double test9(double x) { return __builtin_sinh(x); }
+double test10(double x) { return __builtin_cosh(x); }
+double test11(double x) { return __builtin_asinh(x); }
+double test12(double x) { return __builtin_acosh(x); }
+double test13(double x) { return __builtin_asin(x); }
+double test14(double x) { return __builtin_acos(x); }
+double test15(double x) { return __builtin_log10(x); }
+double test16(double x) { return __builtin_tanh(x); }
+double test17(double x) { return __builtin_atanh(x); }
 
 float test1f(float x) { return __builtin_sqrtf(x); }
 float test2f(float x) { return __builtin_cosf(x); }
@@ -23,6 +33,16 @@ float test4f(float x) { return __builtin
 float test5f(float x) { return __builtin_logf(x); }
 float test6f(float x) { return __builtin_tanf(x); }
 float test7f(float x) { return __builtin_atanf(x); }
+float test8f(float x) { return __builtin_cbrtf(x); }
+float test9f(float x) { return __builtin_sinhf(x); }
+float test10f(float x) { return __builtin_coshf(x); }
+float test11f(float x) { return __builtin_asinhf(x); }
+float test12f(float x) { return __builtin_acoshf(x); }
+float test13f(float x) { return __builtin_asinf(x); }
+float test14f(float x) { return __builtin_acosf(x); }
+float test15f(float x) { return __builtin_log10f(x); }
+float test16f(float x) { return __builtin_tanhf(x); }
+float test17f(float x) { return __builtin_atanhf(x); }
 
 long double test1l(long double x) { return __builtin_sqrtl(x); }
 long double test2l(long double x) { return __builtin_cosl(x); }
@@ -31,4 +51,14 @@ long double test4l(long double x) { retu
 long double test5l(long double x) { return __builtin_logl(x); }
 long double test6l(long double x) { return __builtin_tanl(x); }
 long double test7l(long double x) { return __builtin_atanl(x); }
+long double test8l(long double x) { return __builtin_cbrtl(x); }
+long double test9l(long double x) { return __builtin_sinhl(x); }
+long double test10l(long double x) { return __builtin_coshl(x); }
+long double test11l(long double x) { return __builtin_asinhl(x); }
+long double test12l(long double x) { return __builtin_acoshl(x); }
+long double test13l(long double x) { return __builtin_asinl(x); }
+long double test14l(long double x) { return __builtin_acosl(x); }
+long double test15l(long double x) { return __builtin_log10l(x); }
+long double test16l(long double x) { return __builtin_tanhl(x); }
+long double test17l(long double x) { return __builtin_atanhl(x); }
 
diff -rup orig/egcc-CVS20030729/gcc/testsuite/gcc.dg/builtins-4.c egcc-CVS20030729/gcc/testsuite/gcc.dg/builtins-4.c
--- orig/egcc-CVS20030729/gcc/testsuite/gcc.dg/builtins-4.c	2003-05-23 20:01:58.000000000 -0400
+++ egcc-CVS20030729/gcc/testsuite/gcc.dg/builtins-4.c	2003-07-30 07:50:53.885351000 -0400
@@ -11,10 +11,14 @@
 double test1(double x, double y) { return __builtin_pow(x,y); }
 double test2(double x, double y) { return __builtin_atan2(x,y); }
 double test3(double x, double y) { return __builtin_fmod(x,y); }
+double test4(double x, double y) { return __builtin_hypot(x,y); }
+double test5(double x, int y) { return __builtin_ldexp(x,y); }
 
 float test1f(float x, float y) { return __builtin_powf(x,y); }
 float test2f(float x, float y) { return __builtin_atan2f(x,y); }
 float test3f(float x, float y) { return __builtin_fmodf(x,y); }
+float test4f(float x, float y) { return __builtin_hypotf(x,y); }
+float test5f(float x, int y) { return __builtin_ldexpf(x,y); }
 
 long double test1l(long double x, long double y)
 { return __builtin_powl(x,y); }
@@ -22,4 +26,8 @@ long double test2l(long double x, long d
 { return __builtin_atan2l(x,y); }
 long double test3l(long double x, long double y)
 { return __builtin_fmodl(x,y); }
+long double test4l(long double x, long double y)
+{ return __builtin_hypotl(x,y); }
+long double test5l(long double x, int y)
+{ return __builtin_ldexpl(x,y); }
 


/* Copyright (C) 2003  Free Software Foundation.

   Verify that the `const' attribute is applied to various builtins
   and that these functions are optimized away by the compiler under
   the appropriate circumstances.

   Written by Kaveh Ghazi, 2003-07-30.  */

/* { dg-do link } */
/* { dg-options "-O2 -ffast-math" } */
/* Don't link with libm.a since we want link failures if any functions
   aren't optimized away.  */

#include <math.h>

/* These are helper macros to test combinations of functions.  We
   instantiate foo() == foo() and expect the compiler to optimize away
   these const functions.  */

/* Just test the __builtin_ functions.  */
#define BUILTIN_TEST1(FN, ARG) \
 (__builtin_##FN(ARG) == __builtin_##FN(ARG))

/* Also test the regular (non-__builtin_) function.  */
#define TEST1(FN, ARG) \
 (FN(ARG) == FN(ARG) && BUILTIN_TEST1(FN, ARG))

/* Just test the __builtin_ functions with the FP "f" & "l" variants.  */
#define BUILTIN_FPTEST0(FN) \
 (__builtin_##FN() == __builtin_##FN() \
  && __builtin_##FN##f() == __builtin_##FN##f() \
  && __builtin_##FN##l() == __builtin_##FN##l())

#define BUILTIN_FPTEST1(FN, ARG) \
 (__builtin_##FN(ARG) == __builtin_##FN(ARG) \
  && __builtin_##FN##f(ARG) == __builtin_##FN##f(ARG) \
  && __builtin_##FN##l(ARG) == __builtin_##FN##l(ARG))

#define BUILTIN_FPTEST2(FN, ARG1, ARG2) \
 (__builtin_##FN(ARG1, ARG2) == __builtin_##FN(ARG1, ARG2) \
  && __builtin_##FN##f(ARG1, ARG2) == __builtin_##FN##f(ARG1, ARG2) \
  && __builtin_##FN##l(ARG1, ARG2) == __builtin_##FN##l(ARG1, ARG2))

/* These macros also test the regular (non-__builtin_) functions.  */
#define FPTEST1(FN, ARG) \
 (FN(ARG) == FN(ARG) \
  && FN##f(ARG) == FN##f(ARG) \
  && FN##l(ARG) == FN##l(ARG) \
  && BUILTIN_FPTEST1(FN, ARG))

#define FPTEST2(FN, ARG1, ARG2) \
 (FN(ARG1, ARG2) == FN(ARG1, ARG2) \
  && FN##f(ARG1, ARG2) == FN##f(ARG1, ARG2) \
  && FN##l(ARG1, ARG2) == FN##l(ARG1, ARG2) \
  && BUILTIN_FPTEST2(FN, ARG1, ARG2))

int foo (double x, double y, int z)
{
  return TEST1(ffs,z)
    && TEST1(ffsl,z)
    && TEST1(ffsll,z)
    && BUILTIN_TEST1(clz, z)
    && BUILTIN_TEST1(clzl, z)
    && BUILTIN_TEST1(clzll, z)
    && BUILTIN_TEST1(ctz, z)
    && BUILTIN_TEST1(ctzl, z)
    && BUILTIN_TEST1(ctzll, z)
    && BUILTIN_TEST1(popcount, z)
    && BUILTIN_TEST1(popcountl, z)
    && BUILTIN_TEST1(popcountll, z)
    && BUILTIN_TEST1(parity, z)
    && BUILTIN_TEST1(parityl, z)
    && BUILTIN_TEST1(parityll, z)
    && TEST1(abs,z)
    && TEST1(labs,z)
    && TEST1(llabs,z)
    && TEST1(imaxabs,z)
    && FPTEST1(fabs,x)
    && FPTEST1(floor,x)
    && FPTEST1(ceil,x)
    && FPTEST1(round,x)
    && FPTEST1(trunc,x)
    && FPTEST1(nearbyint,x)
    && FPTEST1(sqrt,x)
    && FPTEST1(cbrt,x)
    && FPTEST2(hypot,x,y)
    && FPTEST2(ldexp,x,z)
    && FPTEST1(sinh,x)
    && FPTEST1(cosh,x)
    && FPTEST1(asinh,x)
    && FPTEST1(acosh,x)
    && FPTEST1(sin,x)
    && FPTEST1(cos,x)
    && FPTEST1(asin,x)
    && FPTEST1(acos,x)
    && FPTEST1(exp,x)
    && FPTEST1(log,x)
    && FPTEST1(log10,x)
    && FPTEST1(tanh,x)
    && FPTEST1(atanh,x)
    && FPTEST1(tan,x)
    && FPTEST1(atan,x)
    && FPTEST2(pow,x,y)
    && FPTEST2(atan2,x,y)
    && FPTEST2(fmod,x,y)
    && BUILTIN_FPTEST0(inf)
    && BUILTIN_FPTEST0(huge_val)
    && FPTEST1(nan,"")
    && FPTEST1(nans,"");
}

int main(void)
{
  return foo(2,3,4);
}



More information about the Gcc-patches mailing list