[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] x86/time: fix scale_delta() inline assembly
# HG changeset patch # User Jan Beulich <jbeulich@xxxxxxxx> # Date 1353946839 -3600 # Node ID 16bf7f3069a77c8a15b785cfdb5f2f634661d7fc # Parent 0049de3827bcfe3488dc6c7b7a60327a562aee5c x86/time: fix scale_delta() inline assembly The way it was coded, it clobbered %rdx without telling the compiler. This generally didn't cause any problems except when there are two back to back invocations (as in plt_overflow()), as in that case the compiler may validly assume that it can re-use for the second instance the value loaded into %rdx before the first one. Once at it, also properly relax the second operand of "mul" (there's no need for it to be in %rdx, or a register at all), and switch away from using explicit register names in the instruction operands. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Acked-by: Keir Fraser <keir@xxxxxxx> --- diff -r 0049de3827bc -r 16bf7f3069a7 xen/arch/x86/time.c --- a/xen/arch/x86/time.c Fri Nov 23 11:06:15 2012 +0000 +++ b/xen/arch/x86/time.c Mon Nov 26 17:20:39 2012 +0100 @@ -127,8 +127,9 @@ static inline u64 scale_delta(u64 delta, delta <<= scale->shift; asm ( - "mul %%rdx ; shrd $32,%%rdx,%%rax" - : "=a" (product) : "0" (delta), "d" ((u64)scale->mul_frac) ); + "mul %2 ; shrd $32,%1,%0" + : "=a" (product), "=d" (delta) + : "rm" (delta), "0" ((u64)scale->mul_frac) ); return product; } _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |