Fix time handling on x86/64.

Signed-off-by: Keir Fraser <keir@xensource.com>
This commit is contained in:
kaf24@firebug.cl.cam.ac.uk committed 2005-08-10 12:56:47 +00:00
1 parent cbc34f7812
commit e9041e1e82
2 files changed
+16

No files matched your search

@@ -173,13 +173,16 @@ struct timer_opts timer_tsc = {
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 @@ static inline u64 scale_delta(u64 delta, u32 mul_frac, int shift)
"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;
}
+8
View File
@@ -103,13 +103,16 @@ static inline u32 mul_frac(u32 multiplicand, u32 multiplier)
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 @@ static inline u64 scale_delta(u64 delta, struct time_scale *scale)
"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;
}
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.