Define *_internal aliases for __divdi3, __moddi3, __udivdi3, and __umoddi3.
[kopensolaris-gnu/glibc.git] / sysdeps / wordsize-32 / divdi3.c
index 7929e30..94fb008 100644 (file)
@@ -1,5 +1,5 @@
 /* 64-bit multiplication and division
-   Copyright (C) 1989, 1992-1999, 2000, 2001, 2002
+   Copyright (C) 1989, 1992-1999, 2000, 2001, 2002, 2003, 2004
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -50,6 +50,12 @@ struct DWstruct { Wtype low, high;};
 #endif
 typedef union { struct DWstruct s; DWtype ll; } DWunion;
 
+/* Prototypes of exported functions.  */
+extern DWtype __divdi3 (DWtype u, DWtype v);
+extern DWtype __moddi3 (DWtype u, DWtype v);
+extern UDWtype __udivdi3 (UDWtype u, UDWtype v);
+extern UDWtype __umoddi3 (UDWtype u, UDWtype v);
+
 static UDWtype
 __udivmoddi4 (UDWtype n, UDWtype d, UDWtype *rp)
 {
@@ -288,6 +294,7 @@ __divdi3 (DWtype u, DWtype v)
     w = -w;
   return w;
 }
+strong_alias (__divdi3, __divdi3_internal)
 
 DWtype
 __moddi3 (DWtype u, DWtype v)
@@ -301,21 +308,20 @@ __moddi3 (DWtype u, DWtype v)
       u = -u;
     }
   if (v < 0)
-    {
-      c = ~c;
-      v = -v;
-    }
+    v = -v;
   __udivmoddi4 (u, v, &w);
   if (c)
     w = -w;
   return w;
 }
+strong_alias (__moddi3, __moddi3_internal)
 
 UDWtype
 __udivdi3 (UDWtype u, UDWtype v)
 {
   return __udivmoddi4 (u, v, NULL);
 }
+strong_alias (__udivdi3, __udivdi3_internal)
 
 UDWtype
 __umoddi3 (UDWtype u, UDWtype v)
@@ -325,3 +331,14 @@ __umoddi3 (UDWtype u, UDWtype v)
   __udivmoddi4 (u, v, &w);
   return w;
 }
+strong_alias (__umoddi3, __umoddi3_internal)
+
+/* We declare these with compat_symbol so that they are not visible at
+   link time.  Programs must use the functions from libgcc.  */
+#if defined HAVE_ELF && defined SHARED && defined DO_VERSIONING
+# include <shlib-compat.h>
+compat_symbol (libc, __divdi3, __divdi3, GLIBC_2_0);
+compat_symbol (libc, __moddi3, __moddi3, GLIBC_2_0);
+compat_symbol (libc, __udivdi3, __udivdi3, GLIBC_2_0);
+compat_symbol (libc, __umoddi3, __umoddi3, GLIBC_2_0);
+#endif