From 358d854df80e035c9d47bae21492b51b406dbe68 Mon Sep 17 00:00:00 2001 From: "Ronald S. Bultje" Date: Mon, 9 Jul 2012 02:21:28 +0200 Subject: x86/cpu: implement get/set_eflags using intrinsics MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Diego Biurrun Signed-off-by: Martin Storsjö --- configure | 2 ++ libavutil/x86/cpu.c | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/configure b/configure index 0f51523ac6..ffb1e7e667 100755 --- a/configure +++ b/configure @@ -1126,6 +1126,7 @@ HAVE_LIST=" rdtsc round roundf + rweflags sched_getaffinity sdl sdl_video_size @@ -2747,6 +2748,7 @@ elif enabled x86; then check_code ld immintrin.h "__xgetbv(0)" && enable xgetbv check_code ld intrin.h "int info[4]; __cpuid(info, 0)" && enable cpuid check_code ld intrin.h "__rdtsc()" && enable rdtsc + check_code ld intrin.h "unsigned int x = __readeflags()" && enable rweflags check_code ld mmintrin.h "_mm_empty()" && enable mm_empty diff --git a/libavutil/x86/cpu.c b/libavutil/x86/cpu.c index 7d65c6075e..d3b1bd5ea6 100644 --- a/libavutil/x86/cpu.c +++ b/libavutil/x86/cpu.c @@ -62,6 +62,8 @@ } while (0) #endif /* HAVE_XGETBV */ +#if HAVE_INLINE_ASM + #define get_eflags(x) \ __asm__ volatile ("pushfl \n" \ "pop %0 \n" \ @@ -72,6 +74,18 @@ "popfl \n" \ :: "r"(x)) +#elif HAVE_RWEFLAGS + +#include + +#define get_eflags(x) \ + x = __readeflags() + +#define set_eflags(x) \ + __writeeflags(x) + +#endif /* HAVE_INLINE_ASM */ + /* Function to test if multimedia instructions are supported... */ int ff_get_cpu_flags_x86(void) { -- cgit v1.2.3