Browse code

avutil/cpu: force mmx on selection of higher x86 SIMD features

Fixes various runtime failures with manually set flags that represent no
existing CPU

Fixes Ticket3653

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 6310eb8010b7a3b3016e297132380cbd4e3d2d10)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>

Michael Niedermayer authored on 2014/05/20 12:23:52
Showing 1 changed files
... ...
@@ -23,6 +23,24 @@
23 23
 static int flags, checked;
24 24
 
25 25
 void av_force_cpu_flags(int arg){
26
+    if (   (arg & ( AV_CPU_FLAG_3DNOW    |
27
+                    AV_CPU_FLAG_3DNOWEXT |
28
+                    AV_CPU_FLAG_SSE      |
29
+                    AV_CPU_FLAG_SSE2     |
30
+                    AV_CPU_FLAG_SSE2SLOW |
31
+                    AV_CPU_FLAG_SSE3     |
32
+                    AV_CPU_FLAG_SSE3SLOW |
33
+                    AV_CPU_FLAG_SSSE3    |
34
+                    AV_CPU_FLAG_SSE4     |
35
+                    AV_CPU_FLAG_SSE42    |
36
+                    AV_CPU_FLAG_AVX      |
37
+                    AV_CPU_FLAG_XOP      |
38
+                    AV_CPU_FLAG_FMA4     ))
39
+        && !(arg & AV_CPU_FLAG_MMX)) {
40
+        av_log(NULL, AV_LOG_WARNING, "MMX implied by specified flags\n");
41
+        arg |= AV_CPU_FLAG_MMX;
42
+    }
43
+
26 44
     flags   = arg;
27 45
     checked = arg != -1;
28 46
 }