Tim Deegan
2013-Feb-14 12:52 UTC
[PATCH] x86: explicit suffix in inline assembler (for clang)
# HG changeset patch # User Tim Deegan <tim@xen.org> # Date 1360846113 0 # Node ID 500907997cb7b9c6973147d56cfd8a1a4c136c7e # Parent 4b01cc2c2c1f4836e7fb34a58bc13e125d67969e x86: explicit suffix in inline assembler (for clang). This fixes the clang build, and has no effect on gcc''s output. Signed-off-by: Tim Deegan <tim@xen.org> diff -r 4b01cc2c2c1f -r 500907997cb7 xen/arch/x86/time.c --- a/xen/arch/x86/time.c Thu Feb 14 12:36:01 2013 +0000 +++ b/xen/arch/x86/time.c Thu Feb 14 12:48:33 2013 +0000 @@ -127,7 +127,7 @@ static inline u64 scale_delta(u64 delta, delta <<= scale->shift; asm ( - "mul %2 ; shrd $32,%1,%0" + "mulq %2 ; shrd $32,%1,%0" : "=a" (product), "=d" (delta) : "rm" (delta), "0" ((u64)scale->mul_frac) );
Jan Beulich
2013-Feb-14 13:18 UTC
Re: [PATCH] x86: explicit suffix in inline assembler (for clang)
>>> On 14.02.13 at 13:52, Tim Deegan <tim@xen.org> wrote: > # HG changeset patch > # User Tim Deegan <tim@xen.org> > # Date 1360846113 0 > # Node ID 500907997cb7b9c6973147d56cfd8a1a4c136c7e > # Parent 4b01cc2c2c1f4836e7fb34a58bc13e125d67969e > x86: explicit suffix in inline assembler (for clang). > > This fixes the clang build, and has no effect on gcc''s output. > > Signed-off-by: Tim Deegan <tim@xen.org> > > diff -r 4b01cc2c2c1f -r 500907997cb7 xen/arch/x86/time.c > --- a/xen/arch/x86/time.c Thu Feb 14 12:36:01 2013 +0000 > +++ b/xen/arch/x86/time.c Thu Feb 14 12:48:33 2013 +0000 > @@ -127,7 +127,7 @@ static inline u64 scale_delta(u64 delta, > delta <<= scale->shift; > > asm ( > - "mul %2 ; shrd $32,%1,%0" > + "mulq %2 ; shrd $32,%1,%0" > : "=a" (product), "=d" (delta) > : "rm" (delta), "0" ((u64)scale->mul_frac) ); >I''ll commit this as being benign, but what the heck? "mul" needs a suffix but "shrd" doesn''t? Jan
Tim Deegan
2013-Feb-14 13:41 UTC
Re: [PATCH] x86: explicit suffix in inline assembler (for clang)
At 13:18 +0000 on 14 Feb (1360847909), Jan Beulich wrote:> >>> On 14.02.13 at 13:52, Tim Deegan <tim@xen.org> wrote: > > # HG changeset patch > > # User Tim Deegan <tim@xen.org> > > # Date 1360846113 0 > > # Node ID 500907997cb7b9c6973147d56cfd8a1a4c136c7e > > # Parent 4b01cc2c2c1f4836e7fb34a58bc13e125d67969e > > x86: explicit suffix in inline assembler (for clang). > > > > This fixes the clang build, and has no effect on gcc''s output. > > > > Signed-off-by: Tim Deegan <tim@xen.org> > > > > diff -r 4b01cc2c2c1f -r 500907997cb7 xen/arch/x86/time.c > > --- a/xen/arch/x86/time.c Thu Feb 14 12:36:01 2013 +0000 > > +++ b/xen/arch/x86/time.c Thu Feb 14 12:48:33 2013 +0000 > > @@ -127,7 +127,7 @@ static inline u64 scale_delta(u64 delta, > > delta <<= scale->shift; > > > > asm ( > > - "mul %2 ; shrd $32,%1,%0" > > + "mulq %2 ; shrd $32,%1,%0" > > : "=a" (product), "=d" (delta) > > : "rm" (delta), "0" ((u64)scale->mul_frac) ); > > > > I''ll commit this as being benign, but what the heck? "mul" needs > a suffix but "shrd" doesn''t?Quite. I presume it''s because mul''s first operand is implicit (and for some reason clang doesn''t see the second operand being a u64 as enough to require the 64-bit version). Tim.