From: Andrea Di Biagio Date: Mon, 30 Jun 2014 18:23:58 +0000 (+0000) Subject: [x86] Add Clang support for intrinsic __rdpmc. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=626ad91fa3270e70df9e789494582a30a8062726;p=clang [x86] Add Clang support for intrinsic __rdpmc. This patch adds intrinsic __rdpmc to header file 'ia32intrin.h'. Intrinsic __rdmpc can be used to read performance monitoring counters. It is implemented as a direct call to __builtin_ia32_rdpmc. It takes as input a value representing the index of the performance counter to read. The value of the performance counter is then returned as a unsigned 64-bit quantity. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212053 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/BuiltinsX86.def b/include/clang/Basic/BuiltinsX86.def index 6cd7a79d54..1f377a8ab1 100644 --- a/include/clang/Basic/BuiltinsX86.def +++ b/include/clang/Basic/BuiltinsX86.def @@ -757,6 +757,7 @@ BUILTIN(__builtin_ia32_xbegin, "i", "") BUILTIN(__builtin_ia32_xend, "v", "") BUILTIN(__builtin_ia32_xabort, "vIc", "") BUILTIN(__builtin_ia32_xtest, "i", "") +BUILTIN(__builtin_ia32_rdpmc, "ULLii", "") BUILTIN(__builtin_ia32_rdtsc, "ULLi", "") BUILTIN(__builtin_ia32_rdtscp, "ULLiUi*", "") diff --git a/lib/Headers/ia32intrin.h b/lib/Headers/ia32intrin.h index 55c22473ba..5adf3f1f5d 100644 --- a/lib/Headers/ia32intrin.h +++ b/lib/Headers/ia32intrin.h @@ -79,6 +79,11 @@ __writeeflags(unsigned int __f) } #endif /* !__x86_64__ */ +static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) +__rdpmc(int __A) { + return __builtin_ia32_rdpmc(__A); +} + /* __rdtsc */ static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) __rdtsc(void) { diff --git a/test/CodeGen/builtins-x86.c b/test/CodeGen/builtins-x86.c index 8443574c52..0f038b8735 100644 --- a/test/CodeGen/builtins-x86.c +++ b/test/CodeGen/builtins-x86.c @@ -266,6 +266,7 @@ void f0() { tmp_i = __builtin_ia32_rdtsc(); tmp_i = __builtin_ia32_rdtscp(&tmp_Ui); + tmp_LLi = __builtin_ia32_rdpmc(tmp_i); #ifdef USE_64 tmp_LLi = __builtin_ia32_cvtss2si64(tmp_V4f); #endif