comparison postproc/swscale.c @ 12017:21e5cb258a95

AltiVec support in postproc/ + altivec optimizations for yuv2yuvX patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
author michael
date Thu, 11 Mar 2004 17:58:11 +0000
parents b352fe84ce64
children 57fd2f36b8cb
comparison
equal deleted inserted replaced
12016:b962aaad2940 12017:21e5cb258a95
671 //Plain C versions 671 //Plain C versions
672 #if !defined (HAVE_MMX) || defined (RUNTIME_CPUDETECT) 672 #if !defined (HAVE_MMX) || defined (RUNTIME_CPUDETECT)
673 #define COMPILE_C 673 #define COMPILE_C
674 #endif 674 #endif
675 675
676 #ifdef ARCH_POWERPC
677 #ifdef HAVE_ALTIVEC
678 #define COMPILE_ALTIVEC
679 #endif //HAVE_ALTIVEC
680 #endif //ARCH_POWERPC
681
676 #ifdef ARCH_X86 682 #ifdef ARCH_X86
677 683
678 #if (defined (HAVE_MMX) && !defined (HAVE_3DNOW) && !defined (HAVE_MMX2)) || defined (RUNTIME_CPUDETECT) 684 #if (defined (HAVE_MMX) && !defined (HAVE_3DNOW) && !defined (HAVE_MMX2)) || defined (RUNTIME_CPUDETECT)
679 #define COMPILE_MMX 685 #define COMPILE_MMX
680 #endif 686 #endif
694 700
695 #ifdef COMPILE_C 701 #ifdef COMPILE_C
696 #undef HAVE_MMX 702 #undef HAVE_MMX
697 #undef HAVE_MMX2 703 #undef HAVE_MMX2
698 #undef HAVE_3DNOW 704 #undef HAVE_3DNOW
705 #undef HAVE_ALTIVEC
699 #define RENAME(a) a ## _C 706 #define RENAME(a) a ## _C
700 #include "swscale_template.c" 707 #include "swscale_template.c"
701 #endif 708 #endif
709
710 #ifdef ARCH_POWERPC
711 #ifdef COMPILE_ALTIVEC
712 #undef RENAME
713 #define HAVE_ALTIVEC
714 #define RENAME(a) a ## _altivec
715 #include "swscale_template.c"
716 #endif
717 #endif //ARCH_POWERPC
702 718
703 #ifdef ARCH_X86 719 #ifdef ARCH_X86
704 720
705 //X86 versions 721 //X86 versions
706 /* 722 /*
1307 return swScale_MMX; 1323 return swScale_MMX;
1308 else 1324 else
1309 return swScale_C; 1325 return swScale_C;
1310 1326
1311 #else 1327 #else
1328 #ifdef ARCH_POWERPC
1329 if(flags & SWS_CPU_CAPS_ALTIVEC)
1330 return swScale_altivec;
1331 else
1332 return swScale_C;
1333 #endif
1312 return swScale_C; 1334 return swScale_C;
1313 #endif 1335 #endif
1314 #else //RUNTIME_CPUDETECT 1336 #else //RUNTIME_CPUDETECT
1315 #ifdef HAVE_MMX2 1337 #ifdef HAVE_MMX2
1316 return swScale_MMX2; 1338 return swScale_MMX2;
1317 #elif defined (HAVE_3DNOW) 1339 #elif defined (HAVE_3DNOW)
1318 return swScale_3DNow; 1340 return swScale_3DNow;
1319 #elif defined (HAVE_MMX) 1341 #elif defined (HAVE_MMX)
1320 return swScale_MMX; 1342 return swScale_MMX;
1343 #elif defined (HAVE_ALTIVEC)
1344 return swScale_altivec;
1321 #else 1345 #else
1322 return swScale_C; 1346 return swScale_C;
1323 #endif 1347 #endif
1324 #endif //!RUNTIME_CPUDETECT 1348 #endif //!RUNTIME_CPUDETECT
1325 } 1349 }
1718 if(flags & SWS_CPU_CAPS_MMX) 1742 if(flags & SWS_CPU_CAPS_MMX)
1719 asm volatile("emms\n\t"::: "memory"); 1743 asm volatile("emms\n\t"::: "memory");
1720 #endif 1744 #endif
1721 1745
1722 #ifndef RUNTIME_CPUDETECT //ensure that the flags match the compiled variant if cpudetect is off 1746 #ifndef RUNTIME_CPUDETECT //ensure that the flags match the compiled variant if cpudetect is off
1723 flags &= ~(SWS_CPU_CAPS_MMX|SWS_CPU_CAPS_MMX2|SWS_CPU_CAPS_3DNOW); 1747 flags &= ~(SWS_CPU_CAPS_MMX|SWS_CPU_CAPS_MMX2|SWS_CPU_CAPS_3DNOW|SWS_CPU_CAPS_ALTIVEC);
1724 #ifdef HAVE_MMX2 1748 #ifdef HAVE_MMX2
1725 flags |= SWS_CPU_CAPS_MMX|SWS_CPU_CAPS_MMX2; 1749 flags |= SWS_CPU_CAPS_MMX|SWS_CPU_CAPS_MMX2;
1726 #elif defined (HAVE_3DNOW) 1750 #elif defined (HAVE_3DNOW)
1727 flags |= SWS_CPU_CAPS_MMX|SWS_CPU_CAPS_3DNOW; 1751 flags |= SWS_CPU_CAPS_MMX|SWS_CPU_CAPS_3DNOW;
1728 #elif defined (HAVE_MMX) 1752 #elif defined (HAVE_MMX)
1729 flags |= SWS_CPU_CAPS_MMX; 1753 flags |= SWS_CPU_CAPS_MMX;
1754 #elif defined (HAVE_ALTIVEC)
1755 flags |= SWS_CPU_CAPS_ALTIVEC;
1730 #endif 1756 #endif
1731 #endif 1757 #endif
1732 if(clip_table[512] != 255) globalInit(); 1758 if(clip_table[512] != 255) globalInit();
1733 if(rgb15to16 == NULL) sws_rgb2rgb_init(flags); 1759 if(rgb15to16 == NULL) sws_rgb2rgb_init(flags);
1734 1760
2031 MSG_INFO("using MMX2\n"); 2057 MSG_INFO("using MMX2\n");
2032 else if(flags & SWS_CPU_CAPS_3DNOW) 2058 else if(flags & SWS_CPU_CAPS_3DNOW)
2033 MSG_INFO("using 3DNOW\n"); 2059 MSG_INFO("using 3DNOW\n");
2034 else if(flags & SWS_CPU_CAPS_MMX) 2060 else if(flags & SWS_CPU_CAPS_MMX)
2035 MSG_INFO("using MMX\n"); 2061 MSG_INFO("using MMX\n");
2036 else 2062 else if(flags & SWS_CPU_CAPS_ALTIVEC)
2063 MSG_INFO("using AltiVec\n");
2064 else
2037 MSG_INFO("using C\n"); 2065 MSG_INFO("using C\n");
2038 } 2066 }
2039 2067
2040 if(flags & SWS_PRINT_INFO) 2068 if(flags & SWS_PRINT_INFO)
2041 { 2069 {