this is a simple implementation of unsigned 64bits divisions
for 32 bits archs.

Signed-off-by: Paul Semel <semelp...@gmail.com>
---
 arch/x86/include/arch/lib.h |  2 ++
 arch/x86/lib.c              | 37 +++++++++++++++++++++++++++++++++++++
 build/files.mk              |  1 +
 3 files changed, 40 insertions(+)
 create mode 100644 arch/x86/lib.c

diff --git a/arch/x86/include/arch/lib.h b/arch/x86/include/arch/lib.h
index 0045902..e077b12 100644
--- a/arch/x86/include/arch/lib.h
+++ b/arch/x86/include/arch/lib.h
@@ -374,6 +374,8 @@ static inline void write_xcr0(uint64_t xcr0)
     xsetbv(0, xcr0);
 }
 
+uint32_t __udiv64_32(uint64_t *n, uint32_t base);
+
 #endif /* XTF_X86_LIB_H */
 
 /*
diff --git a/arch/x86/lib.c b/arch/x86/lib.c
new file mode 100644
index 0000000..46a5353
--- /dev/null
+++ b/arch/x86/lib.c
@@ -0,0 +1,37 @@
+/**
+ * @file arch/x86/decode.c
+ *
+ * Helper routines for decoding x86 architectural state.
+ */
+#include <xtf/lib.h>
+#include <xtf/libc.h>
+
+uint32_t __udiv64_32(uint64_t *n, uint32_t base)
+{
+    uint32_t rem;
+    uint32_t *n_32 = (uint32_t *)n;
+    uint32_t high = n_32[1];
+
+    n_32[1] = 0;
+    if ( high >= base )
+    {
+        n_32[1] = high / base;
+        high %= base;
+    }
+
+    asm("divl %[base]"
+            : "=a" (n_32[0]), "=d" (rem)
+            : [base] "rm" (base), "0" (n_32[0]), "1" (high));
+
+    return rem;
+}
+
+/*
+ * Local variables:
+ * mode: C
+ * c-file-style: "BSD"
+ * c-basic-offset: 4
+ * tab-width: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/build/files.mk b/build/files.mk
index 46b42d6..284ce6e 100644
--- a/build/files.mk
+++ b/build/files.mk
@@ -18,6 +18,7 @@ obj-perarch += $(ROOT)/common/setup.o
 obj-perarch += $(ROOT)/common/xenbus.o
 
 obj-perenv += $(ROOT)/arch/x86/decode.o
+obj-perenv += $(ROOT)/arch/x86/lib.o
 obj-perenv += $(ROOT)/arch/x86/desc.o
 obj-perenv += $(ROOT)/arch/x86/extable.o
 obj-perenv += $(ROOT)/arch/x86/grant_table.o
-- 
2.16.1


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Reply via email to