aboutsummaryrefslogtreecommitdiff
path: root/gcc/fp-test.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@gcc.gnu.org>2000-01-24 12:10:04 -0800
committerRichard Henderson <rth@gcc.gnu.org>2000-01-24 12:10:04 -0800
commit1eb8759b1bc0fd2a74ddbd83db1f01df1a35df69 (patch)
treea9f7967b844ec94122754eade0945e4f551bf9f1 /gcc/fp-test.c
parentd6cde8451a650824fcf971d56978b50d949aa3a2 (diff)
downloadgcc-1eb8759b1bc0fd2a74ddbd83db1f01df1a35df69.zip
gcc-1eb8759b1bc0fd2a74ddbd83db1f01df1a35df69.tar.gz
gcc-1eb8759b1bc0fd2a74ddbd83db1f01df1a35df69.tar.bz2
rtl.def: Add unordered fp comparisions.
* rtl.def: Add unordered fp comparisions. * tree.def: Likewise. * tree.h: Add ISO C 9x unordered fp comparision builtins. * builtins.c (expand_tree_builtin): New function. * c-typeck.c (build_function_call): Use it. (build_binary_op): Support unordered compares. * c-common.c (c_common_nodes_and_builtins): Add unordered compares. * combine.c (known_cond): Handle reverse_condition returning UNKNOWN. (reversible_comparison_p): Allow UNORDERED/ORDERED to be reversed. * cse.c (fold_rtx): Check FLOAT_MODE_P before reversing. (record_jump_equiv): Handle reverse_condition returning UNKNOWN. * jump.c (reverse_condition): Don't abort for UNLE etc, but return UNKNOWN. (swap_condition): Handle unordered compares. (thread_jumps): Check can_reverse before reversing. * loop.c (get_condition): Likewise. Allow UNORERED/ORDERED to be reversed for FP. * optabs.c (can_compare_p): New argument CODE. Verify branch or setcc is present before acking for cmp_optab. Update all callers. (prepare_float_lib_cmp, init_optabs): Handle UNORDERED. * expmed.c (do_cmp_and_jump): Update for can_compare_p. * expr.c (expand_expr): Likewise. Support unordered compares. (do_jump, do_store_flag): Likewise. * expr.h (enum libfunc_index): Add unordered compares. * Makefile.in (FPBIT_FUNCS): Add _unord_sf. (DPBIT_FUNCS): Add _unord_df. * config/fp-bit.c (_unord_f2): New. * fp-test.c (main): Try unordered compare builtins. * alpha-protos.h (alpha_fp_comparison_operator): Declare. * alpha.c (alpha_comparison_operator): Check mode properly. (alpha_swapped_comparison_operator): Likewise. (signed_comparison_operator): Likewise. (alpha_fp_comparison_operator): New. (alpha_emit_conditional_branch): Handle unordered compares. * alpha.h (PREDICATE_CODES): Update. * alpha.md (fp compares): Use alpha_fp_comparison_operator. (bunordered, bordered): New. * cp/call.c (build_over_call): Use expand_tree_builtin. * cp/typeck.c (build_function_call_real): Likewise. (build_binary_op_nodefault): Handle unordered compares. * gcc.c-torture/execute/ieee/fp-cmp-4.c: New. From-SVN: r31591
Diffstat (limited to 'gcc/fp-test.c')
-rw-r--r--gcc/fp-test.c49
1 files changed, 35 insertions, 14 deletions
diff --git a/gcc/fp-test.c b/gcc/fp-test.c
index 667059c..d071244 100644
--- a/gcc/fp-test.c
+++ b/gcc/fp-test.c
@@ -1,23 +1,23 @@
/* fp-test.c - Check that all floating-point operations are available.
- Copyright (C) 1995 Free Software Foundation, Inc.
+ Copyright (C) 1995, 2000 Free Software Foundation, Inc.
Contributed by Ronald F. Guilmette <rfg@monkeys.com>.
-This file is part of GNU CC.
+ This file is part of GNU CC.
-GNU CC 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 2, or (at your option)
-any later version.
+ GNU CC 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 2, or (at your option)
+ any later version.
-GNU CC 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.
+ GNU CC 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 GNU CC; see the file COPYING. If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
+ You should have received a copy of the GNU General Public License
+ along with GNU CC; see the file COPYING. If not, write to
+ the Free Software Foundation, 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
/* This is a trivial test program which may be useful to people who are
porting the GCC or G++ compilers to a new system. The intent here is
@@ -104,6 +104,13 @@ main ()
si = f1 >= f2;
si = f1 <= f2;
+ si = __builtin_isgreater (f1, f2);
+ si = __builtin_isgreaterequal (f1, f2);
+ si = __builtin_isless (f1, f2);
+ si = __builtin_islessequal (f1, f2);
+ si = __builtin_islessgreater (f1, f2);
+ si = __builtin_isunordered (f1, f2);
+
sc = f1;
uc = f1;
ss = f1;
@@ -143,6 +150,13 @@ main ()
si = d1 >= d2;
si = d1 <= d2;
+ si = __builtin_isgreater (d1, d2);
+ si = __builtin_isgreaterequal (d1, d2);
+ si = __builtin_isless (d1, d2);
+ si = __builtin_islessequal (d1, d2);
+ si = __builtin_islessgreater (d1, d2);
+ si = __builtin_isunordered (d1, d2);
+
sc = d1;
uc = d1;
ss = d1;
@@ -182,6 +196,13 @@ main ()
si = D1 >= D2;
si = D1 <= D2;
+ si = __builtin_isgreater (D1, D2);
+ si = __builtin_isgreaterequal (D1, D2);
+ si = __builtin_isless (D1, D2);
+ si = __builtin_islessequal (D1, D2);
+ si = __builtin_islessgreater (D1, D2);
+ si = __builtin_isunordered (D1, D2);
+
sc = D1;
uc = D1;
ss = D1;