From a09e2d91b695e4d0057acaba9f5e7b51fe4abe4f Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 23 Aug 2008 01:18:07 +0000 Subject: [PATCH] Fix __readmsr and __writemsr on amd64 svn path=/branches/ros-amd64-bringup/; revision=35546 --- reactos/include/psdk/intrin_x86.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/reactos/include/psdk/intrin_x86.h b/reactos/include/psdk/intrin_x86.h index 1ee99d6fbb5..5a268e6bb9d 100644 --- a/reactos/include/psdk/intrin_x86.h +++ b/reactos/include/psdk/intrin_x86.h @@ -1200,14 +1200,24 @@ static __inline__ __attribute__((always_inline)) void __invlpg(void * const Addr /*** System operations ***/ static __inline__ __attribute__((always_inline)) unsigned long long __readmsr(const int reg) { +#ifdef _M_AMD64 + unsigned long low, high; + __asm__ __volatile__("rdmsr" : "=a" (low), "=d" (high) : "c" (reg)); + return (high << 32) | low; +#else unsigned long long retval; __asm__ __volatile__("rdmsr" : "=A" (retval) : "c" (reg)); return retval; +#endif } static __inline__ __attribute__((always_inline)) void __writemsr(const unsigned long Register, const unsigned long long Value) { +#ifdef _M_AMD64 + __asm__ __volatile__("wrmsr" : : "a" (Value), "d" (Value >> 32), "c" (Register)); +#else __asm__ __volatile__("wrmsr" : : "A" (Value), "c" (Register)); +#endif } static __inline__ __attribute__((always_inline)) unsigned long long __readpmc(const int counter)