[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.