comparison ppc/check_altivec.c @ 12473:06abedae2906 libavcodec

Merge has_altivec() function into mm_support(), remove it and use mm_support() instead. Reduce complexity and simplify pending move to libavutil.
author stefano
date Wed, 08 Sep 2010 10:02:40 +0000
parents fdafbcef52f5
children
comparison
equal deleted inserted replaced
12472:9c9be94124f8 12473:06abedae2906
41 /** 41 /**
42 * This function MAY rely on signal() or fork() in order to make sure AltiVec 42 * This function MAY rely on signal() or fork() in order to make sure AltiVec
43 * is present. 43 * is present.
44 */ 44 */
45 45
46 int has_altivec(void) 46 int mm_support(void)
47 { 47 {
48 #if HAVE_ALTIVEC
48 #ifdef __AMIGAOS4__ 49 #ifdef __AMIGAOS4__
49 ULONG result = 0; 50 ULONG result = 0;
50 extern struct ExecIFace *IExec; 51 extern struct ExecIFace *IExec;
51 52
52 IExec->GetCPUInfoTags(GCIT_VectorUnit, &result, TAG_DONE); 53 IExec->GetCPUInfoTags(GCIT_VectorUnit, &result, TAG_DONE);
53 if (result == VECTORTYPE_ALTIVEC) return 1; 54 if (result == VECTORTYPE_ALTIVEC)
55 return AV_CPU_FLAG_ALTIVEC;
54 return 0; 56 return 0;
55 #elif defined(__APPLE__) || defined(__OpenBSD__) 57 #elif defined(__APPLE__) || defined(__OpenBSD__)
56 #ifdef __OpenBSD__ 58 #ifdef __OpenBSD__
57 int sels[2] = {CTL_MACHDEP, CPU_ALTIVEC}; 59 int sels[2] = {CTL_MACHDEP, CPU_ALTIVEC};
58 #else 60 #else
62 size_t len = sizeof(has_vu); 64 size_t len = sizeof(has_vu);
63 int err; 65 int err;
64 66
65 err = sysctl(sels, 2, &has_vu, &len, NULL, 0); 67 err = sysctl(sels, 2, &has_vu, &len, NULL, 0);
66 68
67 if (err == 0) return has_vu != 0; 69 if (err == 0)
70 return has_vu ? AV_CPU_FLAG_ALTIVEC : 0;
68 return 0; 71 return 0;
69 #elif CONFIG_RUNTIME_CPUDETECT 72 #elif CONFIG_RUNTIME_CPUDETECT
70 int proc_ver; 73 int proc_ver;
71 // Support of mfspr PVR emulation added in Linux 2.6.17. 74 // Support of mfspr PVR emulation added in Linux 2.6.17.
72 __asm__ volatile("mfspr %0, 287" : "=r" (proc_ver)); 75 __asm__ volatile("mfspr %0, 287" : "=r" (proc_ver));
74 if (proc_ver & 0x8000 || 77 if (proc_ver & 0x8000 ||
75 proc_ver == 0x000c || 78 proc_ver == 0x000c ||
76 proc_ver == 0x0039 || proc_ver == 0x003c || 79 proc_ver == 0x0039 || proc_ver == 0x003c ||
77 proc_ver == 0x0044 || proc_ver == 0x0045 || 80 proc_ver == 0x0044 || proc_ver == 0x0045 ||
78 proc_ver == 0x0070) 81 proc_ver == 0x0070)
79 return 1; 82 return AV_CPU_FLAG_ALTIVEC;
80 return 0; 83 return 0;
81 #else 84 #else
82 // Since we were compiled for AltiVec, just assume we have it 85 // Since we were compiled for AltiVec, just assume we have it
83 // until someone comes up with a proper way (not involving signal hacks). 86 // until someone comes up with a proper way (not involving signal hacks).
84 return 1; 87 return AV_CPU_FLAG_ALTIVEC;
85 #endif /* __AMIGAOS4__ */ 88 #endif /* __AMIGAOS4__ */
89 #endif /* HAVE_ALTIVEC */
90 return 0;
86 } 91 }
87 92