diff options
author | Ronald S. Bultje <rsbultje@gmail.com> | 2012-07-09 02:21:28 +0200 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2012-07-10 14:33:32 +0300 |
commit | 358d854df80e035c9d47bae21492b51b406dbe68 (patch) | |
tree | 6abb1927a4d953cc3fc4c2a2160638e819a19ef5 | |
parent | c0ee695bd7b278f83252c9f93803b107d7aa1e9a (diff) | |
download | ffmpeg-358d854df80e035c9d47bae21492b51b406dbe68.tar.gz |
x86/cpu: implement get/set_eflags using intrinsics
Signed-off-by: Diego Biurrun <diego@biurrun.de>
Signed-off-by: Martin Storsjö <martin@martin.st>
-rwxr-xr-x | configure | 2 | ||||
-rw-r--r-- | libavutil/x86/cpu.c | 14 |
2 files changed, 16 insertions, 0 deletions
@@ -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 <intrin.h> + +#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) { |