aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Wilson <wilson@gcc.gnu.org>1994-03-11 11:51:45 -0800
committerJim Wilson <wilson@gcc.gnu.org>1994-03-11 11:51:45 -0800
commit4754348d7953f4d5a7f5258988930ff0cdcbdcd3 (patch)
treef0e66543537063ac875faefe9ac15181910f08c6
parent761a5bcdf44dbe7f27f733a9143684fb4fd51a8c (diff)
downloadgcc-4754348d7953f4d5a7f5258988930ff0cdcbdcd3.zip
gcc-4754348d7953f4d5a7f5258988930ff0cdcbdcd3.tar.gz
gcc-4754348d7953f4d5a7f5258988930ff0cdcbdcd3.tar.bz2
(emit_float_lib_cmp): Make non static.
(init_optabs): Use {ADDTF3,SUBTF3,MULTF3,DIVTF3,SQRTTF2,FLOATSITF2, FIX_TRUNCTFSI2,EXTENDSFTF2,TRUNCTFSF2,EXTENDDFTF2,TRUNCTFDF2,EQTF2, NETF2,GTTF2,GETF2,LTTF2,LETF2}_LIBCALL macros. From-SVN: r6749
-rw-r--r--gcc/optabs.c67
1 files changed, 65 insertions, 2 deletions
diff --git a/gcc/optabs.c b/gcc/optabs.c
index 4e10e94..f166bcf 100644
--- a/gcc/optabs.c
+++ b/gcc/optabs.c
@@ -205,7 +205,7 @@ enum insn_code setcc_gen_code[NUM_RTX_CODE];
static int add_equal_note PROTO((rtx, rtx, enum rtx_code, rtx, rtx));
static rtx widen_operand PROTO((rtx, enum machine_mode, enum machine_mode, int, int));
-static void emit_float_lib_cmp PROTO((rtx, rtx, enum rtx_code));
+void emit_float_lib_cmp PROTO((rtx, rtx, enum rtx_code));
static enum insn_code can_fix_p PROTO((enum machine_mode, enum machine_mode,
int, int *));
static enum insn_code can_float_p PROTO((enum machine_mode, enum machine_mode,
@@ -2641,7 +2641,7 @@ can_compare_p (mode)
/* Emit a library call comparison between floating point X and Y.
COMPARISON is the rtl operator to compare with (EQ, NE, GT, etc.). */
-static void
+void
emit_float_lib_cmp (x, y, comparison)
rtx x, y;
enum rtx_code comparison;
@@ -3741,6 +3741,28 @@ init_optabs ()
= gen_rtx (SYMBOL_REF, Pmode, UMODTI3_LIBCALL);
#endif
+/* Define library calls for quad FP instructions */
+#ifdef ADDTF3_LIBCALL
+ add_optab->handlers[(int) TFmode].libfunc
+ = gen_rtx (SYMBOL_REF, Pmode, ADDTF3_LIBCALL);
+#endif
+#ifdef SUBTF3_LIBCALL
+ sub_optab->handlers[(int) TFmode].libfunc
+ = gen_rtx (SYMBOL_REF, Pmode, SUBTF3_LIBCALL);
+#endif
+#ifdef MULTF3_LIBCALL
+ smul_optab->handlers[(int) TFmode].libfunc
+ = gen_rtx (SYMBOL_REF, Pmode, MULTF3_LIBCALL);
+#endif
+#ifdef DIVTF3_LIBCALL
+ flodiv_optab->handlers[(int) TFmode].libfunc
+ = gen_rtx (SYMBOL_REF, Pmode, DIVTF3_LIBCALL);
+#endif
+#ifdef SQRTTF2_LIBCALL
+ sqrt_optab->handlers[(int) TFmode].libfunc
+ = gen_rtx (SYMBOL_REF, Pmode, SQRTTF2_LIBCALL);
+#endif
+
/* Use cabs for DC complex abs, since systems generally have cabs.
Don't define any libcall for SCmode, so that cabs will be used. */
abs_optab->handlers[(int) DCmode].libfunc
@@ -3800,6 +3822,26 @@ init_optabs ()
lttf2_libfunc = gen_rtx (SYMBOL_REF, Pmode, "__lttf2");
letf2_libfunc = gen_rtx (SYMBOL_REF, Pmode, "__letf2");
+/* Define library calls for quad FP instructions */
+#ifdef EQTF2_LIBCALL
+ eqtf2_libfunc = gen_rtx (SYMBOL_REF, Pmode, EQTF2_LIBCALL);
+#endif
+#ifdef NETF2_LIBCALL
+ netf2_libfunc = gen_rtx (SYMBOL_REF, Pmode, NETF2_LIBCALL);
+#endif
+#ifdef GTTF2_LIBCALL
+ gttf2_libfunc = gen_rtx (SYMBOL_REF, Pmode, GTTF2_LIBCALL);
+#endif
+#ifdef GETF2_LIBCALL
+ getf2_libfunc = gen_rtx (SYMBOL_REF, Pmode, GETF2_LIBCALL);
+#endif
+#ifdef LTTF2_LIBCALL
+ lttf2_libfunc = gen_rtx (SYMBOL_REF, Pmode, LTTF2_LIBCALL);
+#endif
+#ifdef LETF2_LIBCALL
+ letf2_libfunc = gen_rtx (SYMBOL_REF, Pmode, LETF2_LIBCALL);
+#endif
+
floatsisf_libfunc = gen_rtx (SYMBOL_REF, Pmode, "__floatsisf");
floatdisf_libfunc = gen_rtx (SYMBOL_REF, Pmode, "__floatdisf");
floattisf_libfunc = gen_rtx (SYMBOL_REF, Pmode, "__floattisf");
@@ -3847,6 +3889,27 @@ init_optabs ()
fixunstfsi_libfunc = gen_rtx (SYMBOL_REF, Pmode, "__fixunstfsi");
fixunstfdi_libfunc = gen_rtx (SYMBOL_REF, Pmode, "__fixunstfdi");
fixunstfti_libfunc = gen_rtx (SYMBOL_REF, Pmode, "__fixunstfti");
+
+/* Define library calls for quad FP instructions */
+#ifdef TRUNCTFSF2_LIBCALL
+ trunctfsf2_libfunc = gen_rtx (SYMBOL_REF, Pmode, TRUNCTFSF2_LIBCALL);
+#endif
+#ifdef TRUNCTFDF2_LIBCALL
+ trunctfdf2_libfunc = gen_rtx (SYMBOL_REF, Pmode, TRUNCTFDF2_LIBCALL);
+#endif
+#ifdef EXTENDSFTF2_LIBCALL
+ extendsftf2_libfunc = gen_rtx (SYMBOL_REF, Pmode, EXTENDSFTF2_LIBCALL);
+#endif
+#ifdef EXTENDDFTF2_LIBCALL
+ extenddftf2_libfunc = gen_rtx (SYMBOL_REF, Pmode, EXTENDDFTF2_LIBCALL);
+#endif
+#ifdef FLOATSITF2_LIBCALL
+ floatsitf_libfunc = gen_rtx (SYMBOL_REF, Pmode, FLOATSITF2_LIBCALL);
+#endif
+#ifdef FIX_TRUNCTFSI2_LIBCALL
+ fixtfsi_libfunc = gen_rtx (SYMBOL_REF, Pmode, FIX_TRUNCTFSI2_LIBCALL);
+#endif
+
}
#ifdef BROKEN_LDEXP