|
@@ -22,6 +22,8 @@ static inline u64 pvclock_scale_delta(u64 delta, u32 mul_frac, int shift)
|
|
|
u64 product;
|
|
|
#ifdef __i386__
|
|
|
u32 tmp1, tmp2;
|
|
|
+#else
|
|
|
+ ulong tmp;
|
|
|
#endif
|
|
|
|
|
|
if (shift < 0)
|
|
@@ -42,8 +44,11 @@ static inline u64 pvclock_scale_delta(u64 delta, u32 mul_frac, int shift)
|
|
|
: "a" ((u32)delta), "1" ((u32)(delta >> 32)), "2" (mul_frac) );
|
|
|
#elif defined(__x86_64__)
|
|
|
__asm__ (
|
|
|
- "mul %%rdx ; shrd $32,%%rdx,%%rax"
|
|
|
- : "=a" (product) : "0" (delta), "d" ((u64)mul_frac) );
|
|
|
+ "mul %[mul_frac] ; shrd $32, %[hi], %[lo]"
|
|
|
+ : [lo]"=a"(product),
|
|
|
+ [hi]"=d"(tmp)
|
|
|
+ : "0"(delta),
|
|
|
+ [mul_frac]"rm"((u64)mul_frac));
|
|
|
#else
|
|
|
#error implement me!
|
|
|
#endif
|