On Wed, Mar 14, 2012 at 5:29 PM, Søren Sandmann <[email protected]> wrote: > From: Søren Sandmann Pedersen <[email protected]> > > In 32 bit mode the "=A" constraint refers to the register pair > edx:eax, but according to GCC developers this is not the case in 64 > bit mode, where it refers to "rax". > > Hence, using "=A" for rdtsc is incorrect in 64 bit mode. > > See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21249 > --- > pixman/pixman-private.h | 7 ++++--- > 1 files changed, 4 insertions(+), 3 deletions(-) > > diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h > index 9d96a93..0cba2e9 100644 > --- a/pixman/pixman-private.h > +++ b/pixman/pixman-private.h > @@ -936,10 +936,11 @@ _pixman_log_error (const char *function, const char > *message); > static inline uint64_t > oil_profile_stamp_rdtsc (void) > { > - uint64_t ts; > + uint32_t hi, lo; > > - __asm__ __volatile__ ("rdtsc\n" : "=A" (ts)); > - return ts; > + __asm__ __volatile__ ("rdtsc\n" : "=a" (lo), "=d" (hi)); > + > + return lo | (((uint64_t)hi) << 32); > } > > #define OIL_STAMP oil_profile_stamp_rdtsc > -- > 1.6.0.6
Interesting. What were the symptoms of this bug? _______________________________________________ Pixman mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/pixman
