CHECK_C_SOURCE_RUNS("
#include <x86intrin.h>
int main(int argc, char **argv) {
- unsigned l;
- if (__builtin_ia32_rdtscp(&l)) {
+ __builtin_ia32_lfence ();
+ if (__builtin_ia32_rdtsc()) {
return 0;
}
return -1;
}
-" HAVE_RDTSCP)
+" HAVE_RDTSC)
-IF(NOT HAVE_RDTSCP)
- MESSAGE(STATUS "rdtscp intrinsic is -NOT- supported")
+IF(NOT HAVE_RDTSC)
+ MESSAGE(STATUS "rdtsc intrinsic is -NOT- supported")
ELSE()
- MESSAGE(STATUS "rdtscp intrinsic is supported")
+ MESSAGE(STATUS "rdtsc intrinsic is supported")
ENDIF()
IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
#cmakedefine HAVE_POSIX_FALLOCATE 1
#cmakedefine HAVE_PTHREAD_PROCESS_SHARED 1
#cmakedefine HAVE_PWD_H 1
-#cmakedefine HAVE_RDTSCP 1
+#cmakedefine HAVE_RDTSC 1
#cmakedefine HAVE_READPASSPHRASE_H 1
#cmakedefine HAVE_SA_SIGINFO 1
#cmakedefine HAVE_SANE_SHMEM 1
#ifdef HAVE_SYS_RESOURCE_H
#include <sys/resource.h>
#endif
-#ifdef HAVE_RDTSCP
+#ifdef HAVE_RDTSC
+#ifdef __x86_64__
#include <x86intrin.h>
#endif
+#endif
#include <math.h> /* for pow */
#include "cryptobox.h"
{
gdouble res;
-#ifdef HAVE_RDTSCP
- guint tmp;
+#ifdef HAVE_RDTSC
+# ifdef __x86_64__
guint64 r64;
if (rdtsc_ok) {
- r64 = __builtin_ia32_rdtscp (&tmp);
+ __builtin_ia32_lfence ();
+ r64 = __rdtsc ();
/* Preserve lower 52 bits */
res = r64 & ((1ULL << 53) - 1);
return res;
}
-
+# endif
#endif
#ifdef HAVE_CLOCK_GETTIME
struct timespec ts;