x86 cpuid: set vendor union members separately
authorSean McGovern <gseanmcg@gmail.com>
Wed, 7 Dec 2011 21:51:28 +0000 (21:51 +0000)
committerJanne Grunau <janne-libav@jannau.net>
Wed, 7 Dec 2011 23:57:11 +0000 (00:57 +0100)
Solaris Studio (suncc) has difficulty with filling in
members of a union. Instead, let's retrieve and store the
cpuid() results separately. This is still a compiler bug,
however this fix does not cause a regression on other platforms.

Signed-off-by: Janne Grunau <janne-libav@jannau.net>
libavutil/x86/cpu.c

index 3975e68..2424fe4 100644 (file)
@@ -74,7 +74,10 @@ int ff_get_cpu_flags_x86(void)
         return 0; /* CPUID not supported */
 #endif
 
-    cpuid(0, max_std_level, vendor.i[0], vendor.i[2], vendor.i[1]);
+    cpuid(0, max_std_level, ebx, ecx, edx);
+    vendor.i[0] = ebx;
+    vendor.i[1] = edx;
+    vendor.i[2] = ecx;
 
     if(max_std_level >= 1){
         cpuid(1, eax, ebx, ecx, std_caps);