diff options
author | ghazi <ghazi@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-03-19 03:20:04 +0000 |
---|---|---|
committer | ghazi <ghazi@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-03-19 03:20:04 +0000 |
commit | 0405708bc2e073b1dcabef5f6cb77cfbcc9a2333 (patch) | |
tree | 1789c618755f2ba2580988dfc66c1b24db0fd9d2 /gcc/convert.c | |
parent | 3180c04a1b60af1aa4b90946f57a3bcb5d0ddfc3 (diff) | |
download | gcc-0405708bc2e073b1dcabef5f6cb77cfbcc9a2333.tar.gz |
* convert.c (convert_to_real): Reformat using switch stmt.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@79667 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/convert.c')
-rw-r--r-- | gcc/convert.c | 70 |
1 files changed, 37 insertions, 33 deletions
diff --git a/gcc/convert.c b/gcc/convert.c index 554cd48ea23..7224277206b 100644 --- a/gcc/convert.c +++ b/gcc/convert.c @@ -131,44 +131,48 @@ convert_to_real (tree type, tree expr) present in runtime. */ /* Convert (float)sqrt((double)x) where x is float into sqrtf(x) */ if (optimize - && (fcode == BUILT_IN_SQRT - || fcode == BUILT_IN_SQRTL - || fcode == BUILT_IN_SIN - || fcode == BUILT_IN_SINL - || fcode == BUILT_IN_COS - || fcode == BUILT_IN_COSL - || fcode == BUILT_IN_EXP - || fcode == BUILT_IN_EXPL - || fcode == BUILT_IN_LOG - || fcode == BUILT_IN_LOGL) && (TYPE_MODE (type) == TYPE_MODE (double_type_node) || TYPE_MODE (type) == TYPE_MODE (float_type_node))) { - tree arg0 = strip_float_extensions (TREE_VALUE (TREE_OPERAND (expr, 1))); - tree newtype = type; - - /* We have (outertype)sqrt((innertype)x). Choose the wider mode from - the both as the safe type for operation. */ - if (TYPE_PRECISION (TREE_TYPE (arg0)) > TYPE_PRECISION (type)) - newtype = TREE_TYPE (arg0); - - /* Be careful about integer to fp conversions. - These may overflow still. */ - if (FLOAT_TYPE_P (TREE_TYPE (arg0)) - && TYPE_PRECISION (newtype) < TYPE_PRECISION (itype) - && (TYPE_MODE (newtype) == TYPE_MODE (double_type_node) - || TYPE_MODE (newtype) == TYPE_MODE (float_type_node))) - { - tree arglist; - tree fn = mathfn_built_in (newtype, fcode); - - if (fn) + switch (fcode) + { +#define CASE_MATHFN(FN) case BUILT_IN_##FN: case BUILT_IN_##FN##L: + CASE_MATHFN (SQRT) + CASE_MATHFN (SIN) + CASE_MATHFN (COS) + CASE_MATHFN (EXP) + CASE_MATHFN (LOG) +#undef CASE_MATHFN { - arglist = build_tree_list (NULL_TREE, fold (convert_to_real (newtype, arg0))); - expr = build_function_call_expr (fn, arglist); - if (newtype == type) - return expr; + tree arg0 = strip_float_extensions (TREE_VALUE (TREE_OPERAND (expr, 1))); + tree newtype = type; + + /* We have (outertype)sqrt((innertype)x). Choose the wider mode from + the both as the safe type for operation. */ + if (TYPE_PRECISION (TREE_TYPE (arg0)) > TYPE_PRECISION (type)) + newtype = TREE_TYPE (arg0); + + /* Be careful about integer to fp conversions. + These may overflow still. */ + if (FLOAT_TYPE_P (TREE_TYPE (arg0)) + && TYPE_PRECISION (newtype) < TYPE_PRECISION (itype) + && (TYPE_MODE (newtype) == TYPE_MODE (double_type_node) + || TYPE_MODE (newtype) == TYPE_MODE (float_type_node))) + { + tree arglist; + tree fn = mathfn_built_in (newtype, fcode); + + if (fn) + { + arglist = build_tree_list (NULL_TREE, fold (convert_to_real (newtype, arg0))); + expr = build_function_call_expr (fn, arglist); + if (newtype == type) + return expr; + } + } } + default: + break; } } if (optimize |