From f1ada0dfb2e91f1724a3ebc380c0cc94b72892b8 Mon Sep 17 00:00:00 2001
From: sje <sje@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Thu, 9 Nov 2006 23:48:55 +0000
Subject: [PATCH] 	* 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
---
 gcc/ChangeLog          |  5 +++++
 gcc/config/ia64/ia64.c | 16 ++++++++++++++++
 2 files changed, 21 insertions(+)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bff4acebe5db..36750a002e42 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2006-11-09  Steve Ellcey  <sje@cup.hp.com>
+
+	* config/ia64/ia64.c (ia64_hpux_init_libfuncs):  Use HP-UX millicode
+	routines for integer division.
+
 2006-11-09  Daniel Jacobowitz  <dan@codesourcery.com>
 
 	* config/arm/t-linux (LIBGCC2_DEBUG_CFLAGS): Delete.
diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c
index 418f9a13a8e2..2867e6ff34fb 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");
-- 
GitLab