WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] Fix time handling on x86/64.

# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID 7c9513a80026d90cc97496886b05725c0b3c2f8a
# Parent  50e57636bdd817f51624e40611a77036d2073e23
Fix time handling on x86/64.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>

diff -r 50e57636bdd8 -r 7c9513a80026 
linux-2.6-xen-sparse/arch/xen/i386/kernel/time.c
--- a/linux-2.6-xen-sparse/arch/xen/i386/kernel/time.c  Wed Aug 10 12:21:39 2005
+++ b/linux-2.6-xen-sparse/arch/xen/i386/kernel/time.c  Wed Aug 10 12:56:47 2005
@@ -173,13 +173,16 @@
 static inline u64 scale_delta(u64 delta, u32 mul_frac, int shift)
 {
        u64 product;
+#ifdef __i386__
        u32 tmp1, tmp2;
+#endif
 
        if ( shift < 0 )
                delta >>= -shift;
        else
                delta <<= shift;
 
+#ifdef __i386__
        __asm__ (
                "mul  %5       ; "
                "mov  %4,%%eax ; "
@@ -190,6 +193,11 @@
                "adc  %5,%%edx ; "
                : "=A" (product), "=r" (tmp1), "=r" (tmp2)
                : "a" ((u32)delta), "1" ((u32)(delta >> 32)), "2" (mul_frac) );
+#else
+       __asm__ (
+               "mul %%rdx ; shrd $32,%%rdx,%%rax"
+               : "=a" (product) : "0" (delta), "d" ((u64)mul_frac) );
+#endif
 
        return product;
 }
diff -r 50e57636bdd8 -r 7c9513a80026 xen/arch/x86/time.c
--- a/xen/arch/x86/time.c       Wed Aug 10 12:21:39 2005
+++ b/xen/arch/x86/time.c       Wed Aug 10 12:56:47 2005
@@ -103,13 +103,16 @@
 static inline u64 scale_delta(u64 delta, struct time_scale *scale)
 {
     u64 product;
+#ifdef CONFIG_x86_32
     u32 tmp1, tmp2;
+#endif
 
     if ( scale->shift < 0 )
         delta >>= -scale->shift;
     else
         delta <<= scale->shift;
 
+#ifdef CONFIG_X86_32
     __asm__ (
         "mul  %5       ; "
         "mov  %4,%%eax ; "
@@ -120,6 +123,11 @@
         "adc  %5,%%edx ; "
         : "=A" (product), "=r" (tmp1), "=r" (tmp2)
         : "a" ((u32)delta), "1" ((u32)(delta >> 32)), "2" (scale->mul_frac) );
+#else
+    __asm__ (
+        "mul %%rdx ; shrd $32,%%rdx,%%rax"
+        : "=a" (product) : "0" (delta), "d" ((u64)scale->mul_frac) );
+#endif
 
     return product;
 }

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Fix time handling on x86/64., Xen patchbot -unstable <=