[FFmpeg-cvslog] x86: cpu: Break out test for cpuid capabilities into separate function
Diego Biurrun
git at videolan.org
Fri Oct 5 16:57:04 CEST 2012
ffmpeg | branch: master | Diego Biurrun <diego at biurrun.de> | Thu Oct 4 14:01:26 2012 +0200| [54b243141e9ded3437f055d173272caa399a216e] | committer: Diego Biurrun
x86: cpu: Break out test for cpuid capabilities into separate function
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=54b243141e9ded3437f055d173272caa399a216e
---
libavutil/x86/cpu.c | 32 +++++++++++++++++++++-----------
1 file changed, 21 insertions(+), 11 deletions(-)
diff --git a/libavutil/x86/cpu.c b/libavutil/x86/cpu.c
index 9cf68e4..5de6014 100644
--- a/libavutil/x86/cpu.c
+++ b/libavutil/x86/cpu.c
@@ -86,16 +86,14 @@
#endif /* HAVE_INLINE_ASM */
-/* Function to test if multimedia instructions are supported... */
-int ff_get_cpu_flags_x86(void)
-{
- int rval = 0;
- int eax, ebx, ecx, edx;
- int max_std_level, max_ext_level, std_caps = 0, ext_caps = 0;
- int family = 0, model = 0;
- union { int i[3]; char c[12]; } vendor;
+#if ARCH_X86_64
+
+#define cpuid_test() 1
-#if ARCH_X86_32
+#elif HAVE_INLINE_ASM || HAVE_RWEFLAGS
+
+static int cpuid_test(void)
+{
x86_reg a, c;
/* Check if CPUID is supported by attempting to toggle the ID bit in
@@ -104,10 +102,22 @@ int ff_get_cpu_flags_x86(void)
set_eflags(a ^ 0x200000);
get_eflags(c);
- if (a == c)
- return 0; /* CPUID not supported */
+ return a != c;
+}
#endif
+/* Function to test if multimedia instructions are supported... */
+int ff_get_cpu_flags_x86(void)
+{
+ int rval = 0;
+ int eax, ebx, ecx, edx;
+ int max_std_level, max_ext_level, std_caps = 0, ext_caps = 0;
+ int family = 0, model = 0;
+ union { int i[3]; char c[12]; } vendor;
+
+ if (!cpuid_test())
+ return 0; /* CPUID not supported */
+
cpuid(0, max_std_level, vendor.i[0], vendor.i[2], vendor.i[1]);
if (max_std_level >= 1) {
More information about the ffmpeg-cvslog
mailing list