aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorZack Weinberg <zack@gcc.gnu.org>2003-10-04 21:36:08 +0000
committerZack Weinberg <zack@gcc.gnu.org>2003-10-04 21:36:08 +0000
commitc9034561031a91eb1bb00c94c4d3d1b9bdf5d7e4 (patch)
treef6324710f59b8320a13b6d0d5d1869cf5e937d30 /gcc/config
parentce59b97aeeec8d9cc9754a29b88081b8db4323dc (diff)
downloadgcc-c9034561031a91eb1bb00c94c4d3d1b9bdf5d7e4.zip
gcc-c9034561031a91eb1bb00c94c4d3d1b9bdf5d7e4.tar.gz
gcc-c9034561031a91eb1bb00c94c4d3d1b9bdf5d7e4.tar.bz2
* libfuncs.h
(LTI_eqhf2, LTI_nehf2, LTI_gthf2, LTI_gehf2, LTI_lthf2) (LTI_lehf2, LTI_unordhf2, LTI_eqsf2, LTI_nesf2, LTI_gtsf2) (LTI_gesf2, LTI_ltsf2, LTI_lesf2, LTI_unordsf2, LTI_eqdf2) (LTI_nedf2, LTI_gtdf2, LTI_gedf2, LTI_ltdf2, LTI_ledf2) (LTI_unorddf2, LTI_eqxf2, LTI_nexf2, LTI_gtxf2, LTI_gexf2) (LTI_ltxf2, LTI_lexf2, LTI_unordxf2, LTI_eqtf2, LTI_netf2) (LTI_gttf2, LTI_getf2, LTI_lttf2, LTI_letf2, LTI_unordtf2) (eqhf2_libfunc, nehf2_libfunc, gthf2_libfunc, gehf2_libfunc) (lthf2_libfunc, lehf2_libfunc, unordhf2_libfunc, eqsf2_libfunc) (nesf2_libfunc, gtsf2_libfunc, gesf2_libfunc, ltsf2_libfunc) (lesf2_libfunc, unordsf2_libfunc eqdf2_libfunc, nedf2_libfunc) (gtdf2_libfunc, gedf2_libfunc, ltdf2_libfunc, ledf2_libfunc) (unorddf2_libfunc eqxf2_libfunc, nexf2_libfunc, gtxf2_libfunc) (gexf2_libfunc, ltxf2_libfunc, lexf2_libfunc, unordxf2_libfunc (eqtf2_libfunc, netf2_libfunc, gttf2_libfunc, getf2_libfunc) (lttf2_libfunc, letf2_libfunc, unordtf2_libfunc): Delete. * optabs.h (OTI_eq, OTI_ne, OTI_gt, OTI_ge, OTI_lt, OTI_le) (OTI_unord, eq_optab, ne_optab, gt_optab, ge_optab, lt_optab) (le_optab, unord_optab): New. * optabs.c (prepare_float_lib_cmp): Rewrite. Get the libfuncs from the code_to_optab table, not a giant switch; use swap_condition; do widening only if a comparison function that we can call exists in a wider mode, not if a cmp_optab insn or libfunc exists in a wider mode; call protect_from_queue exactly once on each operand. (init_optabs): Initialize the new optabs, not the deleted libfuncs. * config/gofast.h, config/ia64/ia64.c, config/mips/mips.c * config/pa/pa.c, config/rs6000/rs6000.c, config/sparc/sparc.c: Set floating point comparison libfuncs using set_optab_libfunc on the appropriate optab. * config/ia64/ia64.c (ia64_hpux_init_libfuncs): Fix typo. * config/rs6000/rs6000.c (rs6000_init_libfuncs): Correct ABI selector conditionals. From-SVN: r72101
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/gofast.h24
-rw-r--r--gcc/config/ia64/ia64.c15
-rw-r--r--gcc/config/mips/mips.c24
-rw-r--r--gcc/config/pa/pa.c12
-rw-r--r--gcc/config/rs6000/rs6000.c26
-rw-r--r--gcc/config/sparc/sparc.c12
6 files changed, 57 insertions, 56 deletions
diff --git a/gcc/config/gofast.h b/gcc/config/gofast.h
index 74a22c7..3b3efb9 100644
--- a/gcc/config/gofast.h
+++ b/gcc/config/gofast.h
@@ -52,19 +52,19 @@ gofast_maybe_init_libfuncs (void)
libfuncs, we use our own functions, since GOFAST doesn't supply
them. */
- eqsf2_libfunc = init_one_libfunc ("fpcmp");
- nesf2_libfunc = init_one_libfunc ("fpcmp");
- gtsf2_libfunc = NULL_RTX;
- gesf2_libfunc = NULL_RTX;
- ltsf2_libfunc = init_one_libfunc ("fpcmp");
- lesf2_libfunc = init_one_libfunc ("fpcmp");
+ set_optab_libfunc (eq_optab, SFmode, "fpcmp");
+ set_optab_libfunc (ne_optab, SFmode, "fpcmp");
+ set_optab_libfunc (gt_optab, SFmode, 0);
+ set_optab_libfunc (ge_optab, SFmode, 0);
+ set_optab_libfunc (lt_optab, SFmode, "fpcmp");
+ set_optab_libfunc (le_optab, SFmode, "fpcmp");
- eqdf2_libfunc = init_one_libfunc ("dpcmp");
- nedf2_libfunc = init_one_libfunc ("dpcmp");
- gtdf2_libfunc = NULL_RTX;
- gedf2_libfunc = NULL_RTX;
- ltdf2_libfunc = init_one_libfunc ("dpcmp");
- ledf2_libfunc = init_one_libfunc ("dpcmp");
+ set_optab_libfunc (eq_optab, DFmode, "dpcmp");
+ set_optab_libfunc (ne_optab, DFmode, "dpcmp");
+ set_optab_libfunc (gt_optab, DFmode, 0);
+ set_optab_libfunc (ge_optab, DFmode, 0);
+ set_optab_libfunc (lt_optab, DFmode, "dpcmp");
+ set_optab_libfunc (le_optab, DFmode, "dpcmp");
extendsfdf2_libfunc = init_one_libfunc ("fptodp");
truncdfsf2_libfunc = init_one_libfunc ("dptofp");
diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c
index 1633a58..b10b9e9 100644
--- a/gcc/config/ia64/ia64.c
+++ b/gcc/config/ia64/ia64.c
@@ -8313,13 +8313,20 @@ ia64_hpux_init_libfuncs (void)
{
set_optab_libfunc (add_optab, TFmode, "_U_Qfadd");
set_optab_libfunc (sub_optab, TFmode, "_U_Qfsub");
- set_optab_libfunc (smul_optab, TFmode, "_Q_Qfmpy");
+ set_optab_libfunc (smul_optab, TFmode, "_U_Qfmpy");
set_optab_libfunc (sdiv_optab, TFmode, "_U_Qfdiv");
set_optab_libfunc (smin_optab, TFmode, "_U_Qfmin");
set_optab_libfunc (smax_optab, TFmode, "_U_Qfmax");
set_optab_libfunc (abs_optab, TFmode, "_U_Qfabs");
set_optab_libfunc (neg_optab, TFmode, "_U_Qfneg");
+ set_optab_libfunc (eq_optab, TFmode, "_U_Qfeq");
+ set_optab_libfunc (ne_optab, TFmode, "_U_Qfne");
+ set_optab_libfunc (gt_optab, TFmode, "_U_Qfgt");
+ set_optab_libfunc (ge_optab, TFmode, "_U_Qfge");
+ set_optab_libfunc (lt_optab, TFmode, "_U_Qflt");
+ set_optab_libfunc (le_optab, TFmode, "_U_Qfle");
+
extendsftf2_libfunc = init_one_libfunc ("_U_Qfcnvff_sgl_to_quad");
extenddftf2_libfunc = init_one_libfunc ("_U_Qfcnvff_dbl_to_quad");
trunctfsf2_libfunc = init_one_libfunc ("_U_Qfcnvff_quad_to_sgl");
@@ -8330,12 +8337,6 @@ ia64_hpux_init_libfuncs (void)
fixtfdi_libfunc = init_one_libfunc ("_U_Qfcnvfxt_quad_to_dbl");
fixunstfsi_libfunc = init_one_libfunc ("_U_Qfcnvfxut_quad_to_sgl");
fixunstfdi_libfunc = init_one_libfunc ("_U_Qfcnvfxut_quad_to_dbl");
- eqtf2_libfunc = init_one_libfunc ("_U_Qfeq");
- netf2_libfunc = init_one_libfunc ("_U_Qfne");
- gttf2_libfunc = init_one_libfunc ("_U_Qfgt");
- getf2_libfunc = init_one_libfunc ("_U_Qfge");
- lttf2_libfunc = init_one_libfunc ("_U_Qflt");
- letf2_libfunc = init_one_libfunc ("_U_Qfle");
}
/* Switch to the section to which we should output X. The only thing
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index ae27af1..543b112 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -9015,12 +9015,12 @@ mips_init_libfuncs (void)
set_optab_libfunc (smul_optab, SFmode, "__mips16_mulsf3");
set_optab_libfunc (sdiv_optab, SFmode, "__mips16_divsf3");
- eqsf2_libfunc = init_one_libfunc ("__mips16_eqsf2");
- nesf2_libfunc = init_one_libfunc ("__mips16_nesf2");
- gtsf2_libfunc = init_one_libfunc ("__mips16_gtsf2");
- gesf2_libfunc = init_one_libfunc ("__mips16_gesf2");
- ltsf2_libfunc = init_one_libfunc ("__mips16_ltsf2");
- lesf2_libfunc = init_one_libfunc ("__mips16_lesf2");
+ set_optab_libfunc (eq_optab, SFmode, "__mips16_eqsf2");
+ set_optab_libfunc (ne_optab, SFmode, "__mips16_nesf2");
+ set_optab_libfunc (gt_optab, SFmode, "__mips16_gtsf2");
+ set_optab_libfunc (ge_optab, SFmode, "__mips16_gesf2");
+ set_optab_libfunc (lt_optab, SFmode, "__mips16_ltsf2");
+ set_optab_libfunc (le_optab, SFmode, "__mips16_lesf2");
floatsisf_libfunc = init_one_libfunc ("__mips16_floatsisf");
fixsfsi_libfunc = init_one_libfunc ("__mips16_fixsfsi");
@@ -9032,12 +9032,12 @@ mips_init_libfuncs (void)
set_optab_libfunc (smul_optab, DFmode, "__mips16_muldf3");
set_optab_libfunc (sdiv_optab, DFmode, "__mips16_divdf3");
- eqdf2_libfunc = init_one_libfunc ("__mips16_eqdf2");
- nedf2_libfunc = init_one_libfunc ("__mips16_nedf2");
- gtdf2_libfunc = init_one_libfunc ("__mips16_gtdf2");
- gedf2_libfunc = init_one_libfunc ("__mips16_gedf2");
- ltdf2_libfunc = init_one_libfunc ("__mips16_ltdf2");
- ledf2_libfunc = init_one_libfunc ("__mips16_ledf2");
+ set_optab_libfunc (eq_optab, DFmode, "__mips16_eqdf2");
+ set_optab_libfunc (ne_optab, DFmode, "__mips16_nedf2");
+ set_optab_libfunc (gt_optab, DFmode, "__mips16_gtdf2");
+ set_optab_libfunc (ge_optab, DFmode, "__mips16_gedf2");
+ set_optab_libfunc (lt_optab, DFmode, "__mips16_ltdf2");
+ set_optab_libfunc (le_optab, DFmode, "__mips16_ledf2");
floatsidf_libfunc = init_one_libfunc ("__mips16_floatsidf");
fixdfsi_libfunc = init_one_libfunc ("__mips16_fixdfsi");
diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c
index 6134b0b..a5b9a4d 100644
--- a/gcc/config/pa/pa.c
+++ b/gcc/config/pa/pa.c
@@ -4973,12 +4973,12 @@ pa_hpux_init_libfuncs (void)
set_optab_libfunc (abs_optab, TFmode, "_U_Qfabs");
set_optab_libfunc (neg_optab, TFmode, "_U_Qfneg");
- eqtf2_libfunc = init_one_libfunc ("_U_Qfeq");
- netf2_libfunc = init_one_libfunc ("_U_Qfne");
- gttf2_libfunc = init_one_libfunc ("_U_Qfgt");
- getf2_libfunc = init_one_libfunc ("_U_Qfge");
- lttf2_libfunc = init_one_libfunc ("_U_Qflt");
- letf2_libfunc = init_one_libfunc ("_U_Qfle");
+ set_optab_libfunc (eq_optab, TFmode, "_U_Qfeq");
+ set_optab_libfunc (ne_optab, TFmode, "_U_Qfne");
+ set_optab_libfunc (gt_optab, TFmode, "_U_Qfgt");
+ set_optab_libfunc (ge_optab, TFmode, "_U_Qfge");
+ set_optab_libfunc (lt_optab, TFmode, "_U_Qflt");
+ set_optab_libfunc (le_optab, TFmode, "_U_Qfle");
extendsftf2_libfunc = init_one_libfunc ("_U_Qfcnvff_sgl_to_quad");
extenddftf2_libfunc = init_one_libfunc ("_U_Qfcnvff_dbl_to_quad");
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 0a4ebe1..1f037d9 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -6779,25 +6779,24 @@ rs6000_init_libfuncs (void)
if (!TARGET_HARD_FLOAT)
return;
- if (TARGET_AIX)
+ if (DEFAULT_ABI != ABI_V4)
{
- /* Optabs entries for the int->float routines and quad FP
- operations using the standard AIX names. */
- if (! TARGET_POWER2 && ! TARGET_POWERPC)
+ if (TARGET_XCOFF && ! TARGET_POWER2 && ! TARGET_POWERPC)
{
+ /* AIX library routines for float->int conversion. */
fixdfsi_libfunc = init_one_libfunc ("__itrunc");
fixunsdfsi_libfunc = init_one_libfunc ("__uitrunc");
}
+ /* Standard AIX/Darwin/64-bit SVR4 quad floating point routines. */
set_optab_libfunc (add_optab, TFmode, "_xlqadd");
set_optab_libfunc (sub_optab, TFmode, "_xlqsub");
set_optab_libfunc (smul_optab, TFmode, "_xlqmul");
set_optab_libfunc (sdiv_optab, TFmode, "_xlqdiv");
}
- else if (TARGET_ELF)
+ else
{
- /* Define library calls for quad FP operations. These are all
- part of the PowerPC 32bit ABI. */
+ /* 32-bit SVR4 quad floating point routines. */
set_optab_libfunc (add_optab, TFmode, "_q_add");
set_optab_libfunc (sub_optab, TFmode, "_q_sub");
@@ -6807,12 +6806,13 @@ rs6000_init_libfuncs (void)
if (TARGET_PPC_GPOPT || TARGET_POWER2)
set_optab_libfunc (sqrt_optab, TFmode, "_q_sqrt");
- eqtf2_libfunc = init_one_libfunc ("_q_feq");
- netf2_libfunc = init_one_libfunc ("_q_fne");
- gttf2_libfunc = init_one_libfunc ("_q_fgt");
- getf2_libfunc = init_one_libfunc ("_q_fge");
- lttf2_libfunc = init_one_libfunc ("_q_flt");
- letf2_libfunc = init_one_libfunc ("_q_fle");
+ set_optab_libfunc (eq_optab, TFmode, "_q_feq");
+ set_optab_libfunc (ne_optab, TFmode, "_q_fne");
+ set_optab_libfunc (gt_optab, TFmode, "_q_fgt");
+ set_optab_libfunc (ge_optab, TFmode, "_q_fge");
+ set_optab_libfunc (lt_optab, TFmode, "_q_flt");
+ set_optab_libfunc (le_optab, TFmode, "_q_fle");
+
trunctfsf2_libfunc = init_one_libfunc ("_q_qtos");
trunctfdf2_libfunc = init_one_libfunc ("_q_qtod");
extendsftf2_libfunc = init_one_libfunc ("_q_stoq");
diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c
index 28275b7..adea22f 100644
--- a/gcc/config/sparc/sparc.c
+++ b/gcc/config/sparc/sparc.c
@@ -8424,12 +8424,12 @@ sparc_init_libfuncs (void)
if (TARGET_FPU)
set_optab_libfunc (sqrt_optab, TFmode, "_Q_sqrt");
- eqtf2_libfunc = init_one_libfunc ("_Q_feq");
- netf2_libfunc = init_one_libfunc ("_Q_fne");
- gttf2_libfunc = init_one_libfunc ("_Q_fgt");
- getf2_libfunc = init_one_libfunc ("_Q_fge");
- lttf2_libfunc = init_one_libfunc ("_Q_flt");
- letf2_libfunc = init_one_libfunc ("_Q_fle");
+ set_optab_libfunc (eq_optab, TFmode, "_Q_feq");
+ set_optab_libfunc (ne_optab, TFmode, "_Q_fne");
+ set_optab_libfunc (gt_optab, TFmode, "_Q_fgt");
+ set_optab_libfunc (ge_optab, TFmode, "_Q_fge");
+ set_optab_libfunc (lt_optab, TFmode, "_Q_flt");
+ set_optab_libfunc (le_optab, TFmode, "_Q_fle");
trunctfsf2_libfunc = init_one_libfunc ("_Q_qtos");
trunctfdf2_libfunc = init_one_libfunc ("_Q_qtod");