aboutsummaryrefslogtreecommitdiffstats
path: root/extras/mini-os/lib
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2008-02-26 15:11:07 +0000
committerKeir Fraser <keir.fraser@citrix.com>2008-02-26 15:11:07 +0000
commit480b3a06d1fd212851286a9803ffed70bbe3d9d9 (patch)
tree76fc9ab89798e025d9a77fc44148f73cac826250 /extras/mini-os/lib
parent1511fb10045ecf8aad67a08df0d8cf5b63346fc4 (diff)
downloadxen-480b3a06d1fd212851286a9803ffed70bbe3d9d9.tar.gz
xen-480b3a06d1fd212851286a9803ffed70bbe3d9d9.tar.bz2
xen-480b3a06d1fd212851286a9803ffed70bbe3d9d9.zip
stubdom: fix x86_32 compilation by __moddi3 from FreeBSD
(like has been done previously for umoddi3 etc.) Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com>
Diffstat (limited to 'extras/mini-os/lib')
-rw-r--r--extras/mini-os/lib/math.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/extras/mini-os/lib/math.c b/extras/mini-os/lib/math.c
index 807bcc8e0d..f1f7826080 100644
--- a/extras/mini-os/lib/math.c
+++ b/extras/mini-os/lib/math.c
@@ -388,6 +388,29 @@ __umoddi3(u_quad_t a, u_quad_t b)
return (r);
}
+/*
+ * Return remainder after dividing two signed quads.
+ *
+ * XXX
+ * If -1/2 should produce -1 on this machine, this code is wrong.
+ */
+quad_t
+__moddi3(quad_t a, quad_t b)
+{
+ u_quad_t ua, ub, ur;
+ int neg;
+
+ if (a < 0)
+ ua = -(u_quad_t)a, neg = 1;
+ else
+ ua = a, neg = 0;
+ if (b < 0)
+ ub = -(u_quad_t)b;
+ else
+ ub = b;
+ (void)__qdivrem(ua, ub, &ur);
+ return (neg ? -ur : ur);
+}
#endif /* !defined(__ia64__) */
#ifndef HAVE_LIBC