[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [XTF] [PATCH v2] 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> --- 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@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |