diff options
author | Zack Weinberg <zack@gcc.gnu.org> | 2003-10-04 21:36:08 +0000 |
---|---|---|
committer | Zack Weinberg <zack@gcc.gnu.org> | 2003-10-04 21:36:08 +0000 |
commit | c9034561031a91eb1bb00c94c4d3d1b9bdf5d7e4 (patch) | |
tree | f6324710f59b8320a13b6d0d5d1869cf5e937d30 /gcc/config | |
parent | ce59b97aeeec8d9cc9754a29b88081b8db4323dc (diff) | |
download | gcc-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.h | 24 | ||||
-rw-r--r-- | gcc/config/ia64/ia64.c | 15 | ||||
-rw-r--r-- | gcc/config/mips/mips.c | 24 | ||||
-rw-r--r-- | gcc/config/pa/pa.c | 12 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 26 | ||||
-rw-r--r-- | gcc/config/sparc/sparc.c | 12 |
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"); |