aboutsummaryrefslogtreecommitdiff
path: root/gcc/optabs.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/optabs.c')
-rw-r--r--gcc/optabs.c28
1 files changed, 15 insertions, 13 deletions
diff --git a/gcc/optabs.c b/gcc/optabs.c
index 226b199..fbd7bdf 100644
--- a/gcc/optabs.c
+++ b/gcc/optabs.c
@@ -5396,7 +5396,9 @@ init_integral_libfuncs (optable, opname, suffix)
const char *opname;
int suffix;
{
- init_libfuncs (optable, SImode, TImode, opname, suffix);
+ init_libfuncs (optable, word_mode,
+ mode_for_size (2*BITS_PER_WORD, MODE_INT, 0),
+ opname, suffix);
}
/* Initialize the libfunc fields of an entire group of entries in some
@@ -5410,7 +5412,18 @@ init_floating_libfuncs (optable, opname, suffix)
const char *opname;
int suffix;
{
- init_libfuncs (optable, SFmode, TFmode, opname, suffix);
+ enum machine_mode fmode, dmode, lmode;
+
+ fmode = float_type_node ? TYPE_MODE (float_type_node) : VOIDmode;
+ dmode = double_type_node ? TYPE_MODE (double_type_node) : VOIDmode;
+ lmode = long_double_type_node ? TYPE_MODE (long_double_type_node) : VOIDmode;
+
+ if (fmode != VOIDmode)
+ init_libfuncs (optable, fmode, fmode, opname, suffix);
+ if (dmode != fmode && dmode != VOIDmode)
+ init_libfuncs (optable, dmode, dmode, opname, suffix);
+ if (lmode != dmode && lmode != VOIDmode)
+ init_libfuncs (optable, lmode, lmode, opname, suffix);
}
rtx
@@ -5659,17 +5672,6 @@ init_optabs ()
/* The ffs function operates on `int'. */
ffs_optab->handlers[(int) mode_for_size (INT_TYPE_SIZE, MODE_INT, 0)].libfunc
= init_one_libfunc ("ffs");
- ffs_optab->handlers[(int) DImode].libfunc = init_one_libfunc ("__ffsdi2");
- clz_optab->handlers[(int) SImode].libfunc = init_one_libfunc ("__clzsi2");
- clz_optab->handlers[(int) DImode].libfunc = init_one_libfunc ("__clzdi2");
- ctz_optab->handlers[(int) SImode].libfunc = init_one_libfunc ("__ctzsi2");
- ctz_optab->handlers[(int) DImode].libfunc = init_one_libfunc ("__ctzdi2");
- popcount_optab->handlers[(int) SImode].libfunc
- = init_one_libfunc ("__popcountsi2");
- popcount_optab->handlers[(int) DImode].libfunc
- = init_one_libfunc ("__popcountdi2");
- parity_optab->handlers[(int) SImode].libfunc = init_one_libfunc ("__paritysi2");
- parity_optab->handlers[(int) DImode].libfunc = init_one_libfunc ("__paritydi2");
extendsfdf2_libfunc = init_one_libfunc ("__extendsfdf2");
extendsfxf2_libfunc = init_one_libfunc ("__extendsfxf2");