From: Pat Gavlin Date: Sat, 25 Feb 2017 18:09:00 +0000 (-0800) Subject: Fix _our_GetThreadCycles for clang/xarch. X-Git-Tag: submit/tizen/20210909.063632~11030^2~7919^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d5b5d226c7238b152f070ce259ce491367b1b23e;p=platform%2Fupstream%2Fdotnet%2Fruntime.git Fix _our_GetThreadCycles for clang/xarch. The `"=A"` constraint in `asm volatile("rdtsc" : "=A"(cycles))` does not work as expected on AMD64. Instead, the assembly must use an output constraint for both `eax` and `edx` (i.e. `=a"(lo), "=d"(hi)`). Commit migrated from https://github.com/dotnet/coreclr/commit/6be8d477451eb69861cd000330990487ffa4fcc6 --- diff --git a/src/coreclr/src/jit/compiler.cpp b/src/coreclr/src/jit/compiler.cpp index a9eba55..cd9fa4d 100644 --- a/src/coreclr/src/jit/compiler.cpp +++ b/src/coreclr/src/jit/compiler.cpp @@ -73,9 +73,9 @@ inline bool _our_GetThreadCycles(unsigned __int64* cycleOut) inline bool _our_GetThreadCycles(unsigned __int64* cycleOut) { - uint64_t cycles; - asm volatile("rdtsc" : "=A"(cycles)); - *cycleOut = cycles; + uint32_t hi, lo; + __asm__ __volatile__("rdtsc" : "=a"(lo), "=d"(hi)); + *cycleOut = (static_cast(hi) << 32) | static_cast(lo); return true; }