|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [XTF] [PATCH] lib.c: added unsigned 64bits division for 32 bits arch
this is a simple implementation of unsigned 64bits divisions
for 32 bits archs.
Signed-off-by: Paul Semel <semelpaul@xxxxxxxxx>
---
common/lib.c | 21 +++++++++++++++++++++
include/xtf/lib.h | 4 ++++
2 files changed, 25 insertions(+)
diff --git a/common/lib.c b/common/lib.c
index acf4da1..36d5600 100644
--- a/common/lib.c
+++ b/common/lib.c
@@ -68,6 +68,27 @@ int xtf_get_domid(void)
return domid;
}
+#if defined(__i386__)
+uint32_t __udiv64_32(uint64_t *n, uint32_t base)
+{
+ uint32_t rem;
+ uint32_t high = ((uint32_t *)n)[1];
+
+ ((uint32_t *)n)[1] = 0;
+ if (high >= base) {
+ ((uint32_t *)n)[1] = high / base;
+ high %= base;
+ }
+
+ __asm__("divl %2"
+ : "=a"(((uint32_t*)n)[0]), "=d"(rem)
+ : "rm"(base), "0"(((uint32_t*)n)[0]), "1"(high));
+
+ return rem;
+}
+
+#endif
+
/*
* Local variables:
* mode: C
diff --git a/include/xtf/lib.h b/include/xtf/lib.h
index abf8f25..4479286 100644
--- a/include/xtf/lib.h
+++ b/include/xtf/lib.h
@@ -101,6 +101,10 @@ int xtf_probe_sysctl_interface_version(void);
*/
int xtf_get_domid(void);
+#if defined(__i386__)
+uint32_t __udiv64_32(uint64_t *n, uint32_t base);
+#endif
+
#endif /* XTF_LIB_H */
/*
--
2.16.1
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |