summaryrefslogtreecommitdiff
path: root/gcc/config/ia64
diff options
context:
space:
mode:
authorsje <sje@138bc75d-0d04-0410-961f-82ee72b054a4>2006-11-09 23:48:55 +0000
committersje <sje@138bc75d-0d04-0410-961f-82ee72b054a4>2006-11-09 23:48:55 +0000
commitf1ada0dfb2e91f1724a3ebc380c0cc94b72892b8 (patch)
tree62e6282ea4f8a36429c6218e0a201ef1c09565eb /gcc/config/ia64
parente2a3789bfec81eec91751bd367984c80d235eeb8 (diff)
downloadgcc-f1ada0dfb2e91f1724a3ebc380c0cc94b72892b8.tar.gz
* config/ia64/ia64.c (ia64_hpux_init_libfuncs): Use HP-UX millicode
routines for integer division. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@118632 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/ia64')
-rw-r--r--gcc/config/ia64/ia64.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c
index 418f9a13a8e..2867e6ff34f 100644
--- a/gcc/config/ia64/ia64.c
+++ b/gcc/config/ia64/ia64.c
@@ -9272,6 +9272,22 @@ ia64_hpux_init_libfuncs (void)
{
ia64_init_libfuncs ();
+ /* The HP SI millicode division and mod functions expect DI arguments.
+ By turning them off completely we avoid using both libgcc and the
+ non-standard millicode routines and use the HP DI millicode routines
+ instead. */
+
+ set_optab_libfunc (sdiv_optab, SImode, 0);
+ set_optab_libfunc (udiv_optab, SImode, 0);
+ set_optab_libfunc (smod_optab, SImode, 0);
+ set_optab_libfunc (umod_optab, SImode, 0);
+
+ set_optab_libfunc (sdiv_optab, DImode, "__milli_divI");
+ set_optab_libfunc (udiv_optab, DImode, "__milli_divU");
+ set_optab_libfunc (smod_optab, DImode, "__milli_remI");
+ set_optab_libfunc (umod_optab, DImode, "__milli_remU");
+
+ /* HP-UX libc has TF min/max/abs routines in it. */
set_optab_libfunc (smin_optab, TFmode, "_U_Qfmin");
set_optab_libfunc (smax_optab, TFmode, "_U_Qfmax");
set_optab_libfunc (abs_optab, TFmode, "_U_Qfabs");