[PATCH 5/6] include: Add __rdtsc and __rdtscp intrinsics.

Rémi Bernon rbernon at codeweavers.com
Wed Mar 10 05:22:35 CST 2021


Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
 include/msvcrt/intrin.h | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/include/msvcrt/intrin.h b/include/msvcrt/intrin.h
index 781c6fac823..061866fe63b 100644
--- a/include/msvcrt/intrin.h
+++ b/include/msvcrt/intrin.h
@@ -20,6 +20,36 @@ static inline void __cpuid(int info[4], int ax)
 {
     return __cpuidex(info, ax, 0);
 }
+
+#ifdef __i386
+static inline unsigned __int64 __rdtsc(void)
+{
+    unsigned __int64 a;
+    __asm__ ("rdtsc" : "=A" (a));
+    return a;
+}
+
+static inline unsigned __int64 __rdtscp(unsigned int *aux)
+{
+    unsigned __int64 a;
+    __asm__ ("rdtscp" : "=A" (a), "=c" (*aux));
+    return a;
+}
+#elif defined __amd64
+static inline unsigned __int64 __rdtsc(void)
+{
+    unsigned __int64 a, d;
+    __asm__ ("rdtsc" : "=a" (a), "=d" (d));
+    return (d << 32) | a;
+}
+
+static inline unsigned __int64 __rdtscp(unsigned int *aux)
+{
+    unsigned __int64 a, d;
+    __asm__ ("rdtscp" : "=a" (a), "=d" (d), "=c" (*aux));
+    return (d << 32) | a;
+}
+#endif
 #endif
 
 #ifdef __aarch64__
-- 
2.30.0




More information about the wine-devel mailing list