Mercurial > mplayer.hg
comparison postproc/postprocess_template.c @ 2475:3369845d92f4
3dnow dering
author | michael |
---|---|
date | Thu, 25 Oct 2001 22:50:03 +0000 |
parents | 94a0265c408c |
children | a6c5a537f30a |
comparison
equal
deleted
inserted
replaced
2474:2e9442544447 | 2475:3369845d92f4 |
---|---|
24 doVertDefFilter Ec Ec Ec | 24 doVertDefFilter Ec Ec Ec |
25 isHorizDC Ec Ec | 25 isHorizDC Ec Ec |
26 isHorizMinMaxOk a E | 26 isHorizMinMaxOk a E |
27 doHorizLowPass E e e | 27 doHorizLowPass E e e |
28 doHorizDefFilter Ec Ec Ec | 28 doHorizDefFilter Ec Ec Ec |
29 deRing e | 29 deRing e e* |
30 Vertical RKAlgo1 E a a | 30 Vertical RKAlgo1 E a a |
31 Horizontal RKAlgo1 a a | 31 Horizontal RKAlgo1 a a |
32 Vertical X1 a E E | 32 Vertical X1 a E E |
33 Horizontal X1 a E E | 33 Horizontal X1 a E E |
34 LinIpolDeinterlace e E E* | 34 LinIpolDeinterlace e E E* |
1806 #endif | 1806 #endif |
1807 } | 1807 } |
1808 | 1808 |
1809 static inline void dering(uint8_t src[], int stride, int QP) | 1809 static inline void dering(uint8_t src[], int stride, int QP) |
1810 { | 1810 { |
1811 #ifdef HAVE_MMX2 | 1811 #if defined (HAVE_MMX2) || defined (HAVE_3DNOW) |
1812 asm volatile( | 1812 asm volatile( |
1813 "movq pQPb, %%mm0 \n\t" | 1813 "movq pQPb, %%mm0 \n\t" |
1814 "paddusb %%mm0, %%mm0 \n\t" | 1814 "paddusb %%mm0, %%mm0 \n\t" |
1815 "movq %%mm0, pQPb2 \n\t" | 1815 "movq %%mm0, pQPb2 \n\t" |
1816 | 1816 |
1819 // 0 1 2 3 4 5 6 7 8 9 | 1819 // 0 1 2 3 4 5 6 7 8 9 |
1820 // %0 eax eax+%1 eax+2%1 %0+4%1 ebx ebx+%1 ebx+2%1 %0+8%1 ebx+4%1 | 1820 // %0 eax eax+%1 eax+2%1 %0+4%1 ebx ebx+%1 ebx+2%1 %0+8%1 ebx+4%1 |
1821 | 1821 |
1822 "pcmpeqb %%mm6, %%mm6 \n\t" | 1822 "pcmpeqb %%mm6, %%mm6 \n\t" |
1823 "pxor %%mm7, %%mm7 \n\t" | 1823 "pxor %%mm7, %%mm7 \n\t" |
1824 | 1824 #ifdef HAVE_MMX2 |
1825 #define FIND_MIN_MAX(addr)\ | 1825 #define FIND_MIN_MAX(addr)\ |
1826 "movq " #addr ", %%mm0 \n\t"\ | 1826 "movq " #addr ", %%mm0 \n\t"\ |
1827 "pminub %%mm0, %%mm6 \n\t"\ | 1827 "pminub %%mm0, %%mm6 \n\t"\ |
1828 "pmaxub %%mm0, %%mm7 \n\t" | 1828 "pmaxub %%mm0, %%mm7 \n\t" |
1829 #else | |
1830 #define FIND_MIN_MAX(addr)\ | |
1831 "movq " #addr ", %%mm0 \n\t"\ | |
1832 "movq %%mm6, %%mm1 \n\t"\ | |
1833 "psubusb %%mm0, %%mm7 \n\t"\ | |
1834 "paddb %%mm0, %%mm7 \n\t"\ | |
1835 "psubusb %%mm0, %%mm1 \n\t"\ | |
1836 "psubb %%mm1, %%mm6 \n\t" | |
1837 #endif | |
1829 | 1838 |
1830 FIND_MIN_MAX((%%eax)) | 1839 FIND_MIN_MAX((%%eax)) |
1831 FIND_MIN_MAX((%%eax, %1)) | 1840 FIND_MIN_MAX((%%eax, %1)) |
1832 FIND_MIN_MAX((%%eax, %1, 2)) | 1841 FIND_MIN_MAX((%%eax, %1, 2)) |
1833 FIND_MIN_MAX((%0, %1, 4)) | 1842 FIND_MIN_MAX((%0, %1, 4)) |
1836 FIND_MIN_MAX((%%ebx, %1, 2)) | 1845 FIND_MIN_MAX((%%ebx, %1, 2)) |
1837 FIND_MIN_MAX((%0, %1, 8)) | 1846 FIND_MIN_MAX((%0, %1, 8)) |
1838 | 1847 |
1839 "movq %%mm6, %%mm4 \n\t" | 1848 "movq %%mm6, %%mm4 \n\t" |
1840 "psrlq $8, %%mm6 \n\t" | 1849 "psrlq $8, %%mm6 \n\t" |
1850 #ifdef HAVE_MMX2 | |
1841 "pminub %%mm4, %%mm6 \n\t" // min of pixels | 1851 "pminub %%mm4, %%mm6 \n\t" // min of pixels |
1842 #ifdef HAVE_MMX2 | |
1843 "pshufw $0xF9, %%mm6, %%mm4 \n\t" | 1852 "pshufw $0xF9, %%mm6, %%mm4 \n\t" |
1844 "pminub %%mm4, %%mm6 \n\t" // min of pixels | 1853 "pminub %%mm4, %%mm6 \n\t" // min of pixels |
1845 "pshufw $0xFE, %%mm6, %%mm4 \n\t" | 1854 "pshufw $0xFE, %%mm6, %%mm4 \n\t" |
1855 "pminub %%mm4, %%mm6 \n\t" | |
1846 #else | 1856 #else |
1857 "movq %%mm6, %%mm1 \n\t" | |
1858 "psubusb %%mm4, %%mm1 \n\t" | |
1859 "psubb %%mm1, %%mm6 \n\t" | |
1847 "movq %%mm6, %%mm4 \n\t" | 1860 "movq %%mm6, %%mm4 \n\t" |
1848 "psrlq $16, %%mm6 \n\t" | 1861 "psrlq $16, %%mm6 \n\t" |
1849 "pminub %%mm4, %%mm6 \n\t" | 1862 "movq %%mm6, %%mm1 \n\t" |
1863 "psubusb %%mm4, %%mm1 \n\t" | |
1864 "psubb %%mm1, %%mm6 \n\t" | |
1850 "movq %%mm6, %%mm4 \n\t" | 1865 "movq %%mm6, %%mm4 \n\t" |
1851 "psrlq $32, %%mm6 \n\t" | 1866 "psrlq $32, %%mm6 \n\t" |
1852 #endif | 1867 "movq %%mm6, %%mm1 \n\t" |
1853 "pminub %%mm4, %%mm6 \n\t" | 1868 "psubusb %%mm4, %%mm1 \n\t" |
1869 "psubb %%mm1, %%mm6 \n\t" | |
1870 #endif | |
1854 | 1871 |
1855 | 1872 |
1856 "movq %%mm7, %%mm4 \n\t" | 1873 "movq %%mm7, %%mm4 \n\t" |
1857 "psrlq $8, %%mm7 \n\t" | 1874 "psrlq $8, %%mm7 \n\t" |
1875 #ifdef HAVE_MMX2 | |
1858 "pmaxub %%mm4, %%mm7 \n\t" // max of pixels | 1876 "pmaxub %%mm4, %%mm7 \n\t" // max of pixels |
1859 #ifdef HAVE_MMX2 | |
1860 "pshufw $0xF9, %%mm7, %%mm4 \n\t" | 1877 "pshufw $0xF9, %%mm7, %%mm4 \n\t" |
1861 "pmaxub %%mm4, %%mm7 \n\t" // min of pixels | 1878 "pmaxub %%mm4, %%mm7 \n\t" |
1862 "pshufw $0xFE, %%mm7, %%mm4 \n\t" | 1879 "pshufw $0xFE, %%mm7, %%mm4 \n\t" |
1880 "pmaxub %%mm4, %%mm7 \n\t" | |
1863 #else | 1881 #else |
1882 "psubusb %%mm4, %%mm7 \n\t" | |
1883 "paddb %%mm4, %%mm7 \n\t" | |
1864 "movq %%mm7, %%mm4 \n\t" | 1884 "movq %%mm7, %%mm4 \n\t" |
1865 "psrlq $16, %%mm7 \n\t" | 1885 "psrlq $16, %%mm7 \n\t" |
1866 "pmaxub %%mm4, %%mm7 \n\t" | 1886 "psubusb %%mm4, %%mm7 \n\t" |
1887 "paddb %%mm4, %%mm7 \n\t" | |
1867 "movq %%mm7, %%mm4 \n\t" | 1888 "movq %%mm7, %%mm4 \n\t" |
1868 "psrlq $32, %%mm7 \n\t" | 1889 "psrlq $32, %%mm7 \n\t" |
1869 #endif | 1890 "psubusb %%mm4, %%mm7 \n\t" |
1870 "pmaxub %%mm4, %%mm7 \n\t" | 1891 "paddb %%mm4, %%mm7 \n\t" |
1892 #endif | |
1871 PAVGB(%%mm6, %%mm7) // a=(max + min)/2 | 1893 PAVGB(%%mm6, %%mm7) // a=(max + min)/2 |
1872 "punpcklbw %%mm7, %%mm7 \n\t" | 1894 "punpcklbw %%mm7, %%mm7 \n\t" |
1873 "punpcklbw %%mm7, %%mm7 \n\t" | 1895 "punpcklbw %%mm7, %%mm7 \n\t" |
1874 "punpcklbw %%mm7, %%mm7 \n\t" | 1896 "punpcklbw %%mm7, %%mm7 \n\t" |
1875 "movq %%mm7, temp0 \n\t" | 1897 "movq %%mm7, temp0 \n\t" |