diff options
author | Ronald S. Bultje <rsbultje@gmail.com> | 2012-07-09 02:21:27 +0200 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2012-07-10 14:33:24 +0300 |
commit | c0ee695bd7b278f83252c9f93803b107d7aa1e9a (patch) | |
tree | 8b709351767373366506ebe2e57efa5e66ebff74 | |
parent | 3f150ffba31e404ca48624dc6af27b85c1704862 (diff) | |
download | ffmpeg-streaming-c0ee695bd7b278f83252c9f93803b107d7aa1e9a.zip ffmpeg-streaming-c0ee695bd7b278f83252c9f93803b107d7aa1e9a.tar.gz |
x86/cpu: implement support for cpuid through intrinsics
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
@@ -1061,6 +1061,7 @@ HAVE_LIST=" cbrtf closesocket cmov + cpuid dcbzl dev_bktr_ioctl_bt848_h dev_bktr_ioctl_meteor_h @@ -2744,6 +2745,7 @@ elif enabled sparc; then 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 mmintrin.h "_mm_empty()" && enable mm_empty diff --git a/libavutil/x86/cpu.c b/libavutil/x86/cpu.c index dfdc123..7d65c60 100644 --- a/libavutil/x86/cpu.c +++ b/libavutil/x86/cpu.c @@ -25,6 +25,7 @@ #include "libavutil/x86_cpu.h" #include "libavutil/cpu.h" +#if HAVE_INLINE_ASM /* ebx saving is necessary for PIC. gcc seems unable to see it alone */ #define cpuid(index, eax, ebx, ecx, edx) \ __asm__ volatile ( \ @@ -33,6 +34,19 @@ "xchg %%"REG_b", %%"REG_S \ : "=a" (eax), "=S" (ebx), "=c" (ecx), "=d" (edx) \ : "0" (index)) +#elif HAVE_CPUID +#include <intrin.h> + +#define cpuid(index, eax, ebx, ecx, edx) \ + do { \ + int info[4]; \ + __cpuid(info, index); \ + eax = info[0]; \ + ebx = info[1]; \ + ecx = info[2]; \ + edx = info[3]; \ + } while (0) +#endif /* HAVE_CPUID */ #if HAVE_INLINE_ASM #define xgetbv(index, eax, edx) \ |