comparison libswscale/rgb2rgb_template.c @ 19396:8fe37c66d10a

-fPIC support for libswscale patch by Jason Tackaberry, tack /at/ urandom /dot/ ca
author diego
date Tue, 15 Aug 2006 08:47:03 +0000
parents 6334c14b38eb
children ad7f49a1ba95
comparison
equal deleted inserted replaced
19395:fa53ace863b9 19396:8fe37c66d10a
2116 asm volatile( 2116 asm volatile(
2117 "mov %2, %%"REG_a" \n\t" 2117 "mov %2, %%"REG_a" \n\t"
2118 "movq "MANGLE(bgr2YCoeff)", %%mm6 \n\t" 2118 "movq "MANGLE(bgr2YCoeff)", %%mm6 \n\t"
2119 "movq "MANGLE(w1111)", %%mm5 \n\t" 2119 "movq "MANGLE(w1111)", %%mm5 \n\t"
2120 "pxor %%mm7, %%mm7 \n\t" 2120 "pxor %%mm7, %%mm7 \n\t"
2121 "lea (%%"REG_a", %%"REG_a", 2), %%"REG_b"\n\t" 2121 "lea (%%"REG_a", %%"REG_a", 2), %%"REG_d"\n\t"
2122 ASMALIGN(4) 2122 ASMALIGN(4)
2123 "1: \n\t" 2123 "1: \n\t"
2124 PREFETCH" 64(%0, %%"REG_b") \n\t" 2124 PREFETCH" 64(%0, %%"REG_d") \n\t"
2125 "movd (%0, %%"REG_b"), %%mm0 \n\t" 2125 "movd (%0, %%"REG_d"), %%mm0 \n\t"
2126 "movd 3(%0, %%"REG_b"), %%mm1 \n\t" 2126 "movd 3(%0, %%"REG_d"), %%mm1 \n\t"
2127 "punpcklbw %%mm7, %%mm0 \n\t" 2127 "punpcklbw %%mm7, %%mm0 \n\t"
2128 "punpcklbw %%mm7, %%mm1 \n\t" 2128 "punpcklbw %%mm7, %%mm1 \n\t"
2129 "movd 6(%0, %%"REG_b"), %%mm2 \n\t" 2129 "movd 6(%0, %%"REG_d"), %%mm2 \n\t"
2130 "movd 9(%0, %%"REG_b"), %%mm3 \n\t" 2130 "movd 9(%0, %%"REG_d"), %%mm3 \n\t"
2131 "punpcklbw %%mm7, %%mm2 \n\t" 2131 "punpcklbw %%mm7, %%mm2 \n\t"
2132 "punpcklbw %%mm7, %%mm3 \n\t" 2132 "punpcklbw %%mm7, %%mm3 \n\t"
2133 "pmaddwd %%mm6, %%mm0 \n\t" 2133 "pmaddwd %%mm6, %%mm0 \n\t"
2134 "pmaddwd %%mm6, %%mm1 \n\t" 2134 "pmaddwd %%mm6, %%mm1 \n\t"
2135 "pmaddwd %%mm6, %%mm2 \n\t" 2135 "pmaddwd %%mm6, %%mm2 \n\t"
2145 "pmaddwd %%mm5, %%mm0 \n\t" 2145 "pmaddwd %%mm5, %%mm0 \n\t"
2146 "pmaddwd %%mm5, %%mm2 \n\t" 2146 "pmaddwd %%mm5, %%mm2 \n\t"
2147 "packssdw %%mm2, %%mm0 \n\t" 2147 "packssdw %%mm2, %%mm0 \n\t"
2148 "psraw $7, %%mm0 \n\t" 2148 "psraw $7, %%mm0 \n\t"
2149 2149
2150 "movd 12(%0, %%"REG_b"), %%mm4 \n\t" 2150 "movd 12(%0, %%"REG_d"), %%mm4 \n\t"
2151 "movd 15(%0, %%"REG_b"), %%mm1 \n\t" 2151 "movd 15(%0, %%"REG_d"), %%mm1 \n\t"
2152 "punpcklbw %%mm7, %%mm4 \n\t" 2152 "punpcklbw %%mm7, %%mm4 \n\t"
2153 "punpcklbw %%mm7, %%mm1 \n\t" 2153 "punpcklbw %%mm7, %%mm1 \n\t"
2154 "movd 18(%0, %%"REG_b"), %%mm2 \n\t" 2154 "movd 18(%0, %%"REG_d"), %%mm2 \n\t"
2155 "movd 21(%0, %%"REG_b"), %%mm3 \n\t" 2155 "movd 21(%0, %%"REG_d"), %%mm3 \n\t"
2156 "punpcklbw %%mm7, %%mm2 \n\t" 2156 "punpcklbw %%mm7, %%mm2 \n\t"
2157 "punpcklbw %%mm7, %%mm3 \n\t" 2157 "punpcklbw %%mm7, %%mm3 \n\t"
2158 "pmaddwd %%mm6, %%mm4 \n\t" 2158 "pmaddwd %%mm6, %%mm4 \n\t"
2159 "pmaddwd %%mm6, %%mm1 \n\t" 2159 "pmaddwd %%mm6, %%mm1 \n\t"
2160 "pmaddwd %%mm6, %%mm2 \n\t" 2160 "pmaddwd %%mm6, %%mm2 \n\t"
2167 #endif 2167 #endif
2168 "packssdw %%mm1, %%mm4 \n\t" 2168 "packssdw %%mm1, %%mm4 \n\t"
2169 "packssdw %%mm3, %%mm2 \n\t" 2169 "packssdw %%mm3, %%mm2 \n\t"
2170 "pmaddwd %%mm5, %%mm4 \n\t" 2170 "pmaddwd %%mm5, %%mm4 \n\t"
2171 "pmaddwd %%mm5, %%mm2 \n\t" 2171 "pmaddwd %%mm5, %%mm2 \n\t"
2172 "add $24, %%"REG_b" \n\t" 2172 "add $24, %%"REG_d" \n\t"
2173 "packssdw %%mm2, %%mm4 \n\t" 2173 "packssdw %%mm2, %%mm4 \n\t"
2174 "psraw $7, %%mm4 \n\t" 2174 "psraw $7, %%mm4 \n\t"
2175 2175
2176 "packuswb %%mm4, %%mm0 \n\t" 2176 "packuswb %%mm4, %%mm0 \n\t"
2177 "paddusb "MANGLE(bgr2YOffset)", %%mm0 \n\t" 2177 "paddusb "MANGLE(bgr2YOffset)", %%mm0 \n\t"
2178 2178
2179 MOVNTQ" %%mm0, (%1, %%"REG_a") \n\t" 2179 MOVNTQ" %%mm0, (%1, %%"REG_a") \n\t"
2180 "add $8, %%"REG_a" \n\t" 2180 "add $8, %%"REG_a" \n\t"
2181 " js 1b \n\t" 2181 " js 1b \n\t"
2182 : : "r" (src+width*3), "r" (ydst+width), "g" (-width) 2182 : : "r" (src+width*3), "r" (ydst+width), "g" (-width)
2183 : "%"REG_a, "%"REG_b 2183 : "%"REG_a, "%"REG_d
2184 ); 2184 );
2185 ydst += lumStride; 2185 ydst += lumStride;
2186 src += srcStride; 2186 src += srcStride;
2187 } 2187 }
2188 src -= srcStride*2; 2188 src -= srcStride*2;
2189 asm volatile( 2189 asm volatile(
2190 "mov %4, %%"REG_a" \n\t" 2190 "mov %4, %%"REG_a" \n\t"
2191 "movq "MANGLE(w1111)", %%mm5 \n\t" 2191 "movq "MANGLE(w1111)", %%mm5 \n\t"
2192 "movq "MANGLE(bgr2UCoeff)", %%mm6 \n\t" 2192 "movq "MANGLE(bgr2UCoeff)", %%mm6 \n\t"
2193 "pxor %%mm7, %%mm7 \n\t" 2193 "pxor %%mm7, %%mm7 \n\t"
2194 "lea (%%"REG_a", %%"REG_a", 2), %%"REG_b"\n\t" 2194 "lea (%%"REG_a", %%"REG_a", 2), %%"REG_d"\n\t"
2195 "add %%"REG_b", %%"REG_b" \n\t" 2195 "add %%"REG_d", %%"REG_d" \n\t"
2196 ASMALIGN(4) 2196 ASMALIGN(4)
2197 "1: \n\t" 2197 "1: \n\t"
2198 PREFETCH" 64(%0, %%"REG_b") \n\t" 2198 PREFETCH" 64(%0, %%"REG_d") \n\t"
2199 PREFETCH" 64(%1, %%"REG_b") \n\t" 2199 PREFETCH" 64(%1, %%"REG_d") \n\t"
2200 #if defined (HAVE_MMX2) || defined (HAVE_3DNOW) 2200 #if defined (HAVE_MMX2) || defined (HAVE_3DNOW)
2201 "movq (%0, %%"REG_b"), %%mm0 \n\t" 2201 "movq (%0, %%"REG_d"), %%mm0 \n\t"
2202 "movq (%1, %%"REG_b"), %%mm1 \n\t" 2202 "movq (%1, %%"REG_d"), %%mm1 \n\t"
2203 "movq 6(%0, %%"REG_b"), %%mm2 \n\t" 2203 "movq 6(%0, %%"REG_d"), %%mm2 \n\t"
2204 "movq 6(%1, %%"REG_b"), %%mm3 \n\t" 2204 "movq 6(%1, %%"REG_d"), %%mm3 \n\t"
2205 PAVGB" %%mm1, %%mm0 \n\t" 2205 PAVGB" %%mm1, %%mm0 \n\t"
2206 PAVGB" %%mm3, %%mm2 \n\t" 2206 PAVGB" %%mm3, %%mm2 \n\t"
2207 "movq %%mm0, %%mm1 \n\t" 2207 "movq %%mm0, %%mm1 \n\t"
2208 "movq %%mm2, %%mm3 \n\t" 2208 "movq %%mm2, %%mm3 \n\t"
2209 "psrlq $24, %%mm0 \n\t" 2209 "psrlq $24, %%mm0 \n\t"
2211 PAVGB" %%mm1, %%mm0 \n\t" 2211 PAVGB" %%mm1, %%mm0 \n\t"
2212 PAVGB" %%mm3, %%mm2 \n\t" 2212 PAVGB" %%mm3, %%mm2 \n\t"
2213 "punpcklbw %%mm7, %%mm0 \n\t" 2213 "punpcklbw %%mm7, %%mm0 \n\t"
2214 "punpcklbw %%mm7, %%mm2 \n\t" 2214 "punpcklbw %%mm7, %%mm2 \n\t"
2215 #else 2215 #else
2216 "movd (%0, %%"REG_b"), %%mm0 \n\t" 2216 "movd (%0, %%"REG_d"), %%mm0 \n\t"
2217 "movd (%1, %%"REG_b"), %%mm1 \n\t" 2217 "movd (%1, %%"REG_d"), %%mm1 \n\t"
2218 "movd 3(%0, %%"REG_b"), %%mm2 \n\t" 2218 "movd 3(%0, %%"REG_d"), %%mm2 \n\t"
2219 "movd 3(%1, %%"REG_b"), %%mm3 \n\t" 2219 "movd 3(%1, %%"REG_d"), %%mm3 \n\t"
2220 "punpcklbw %%mm7, %%mm0 \n\t" 2220 "punpcklbw %%mm7, %%mm0 \n\t"
2221 "punpcklbw %%mm7, %%mm1 \n\t" 2221 "punpcklbw %%mm7, %%mm1 \n\t"
2222 "punpcklbw %%mm7, %%mm2 \n\t" 2222 "punpcklbw %%mm7, %%mm2 \n\t"
2223 "punpcklbw %%mm7, %%mm3 \n\t" 2223 "punpcklbw %%mm7, %%mm3 \n\t"
2224 "paddw %%mm1, %%mm0 \n\t" 2224 "paddw %%mm1, %%mm0 \n\t"
2225 "paddw %%mm3, %%mm2 \n\t" 2225 "paddw %%mm3, %%mm2 \n\t"
2226 "paddw %%mm2, %%mm0 \n\t" 2226 "paddw %%mm2, %%mm0 \n\t"
2227 "movd 6(%0, %%"REG_b"), %%mm4 \n\t" 2227 "movd 6(%0, %%"REG_d"), %%mm4 \n\t"
2228 "movd 6(%1, %%"REG_b"), %%mm1 \n\t" 2228 "movd 6(%1, %%"REG_d"), %%mm1 \n\t"
2229 "movd 9(%0, %%"REG_b"), %%mm2 \n\t" 2229 "movd 9(%0, %%"REG_d"), %%mm2 \n\t"
2230 "movd 9(%1, %%"REG_b"), %%mm3 \n\t" 2230 "movd 9(%1, %%"REG_d"), %%mm3 \n\t"
2231 "punpcklbw %%mm7, %%mm4 \n\t" 2231 "punpcklbw %%mm7, %%mm4 \n\t"
2232 "punpcklbw %%mm7, %%mm1 \n\t" 2232 "punpcklbw %%mm7, %%mm1 \n\t"
2233 "punpcklbw %%mm7, %%mm2 \n\t" 2233 "punpcklbw %%mm7, %%mm2 \n\t"
2234 "punpcklbw %%mm7, %%mm3 \n\t" 2234 "punpcklbw %%mm7, %%mm3 \n\t"
2235 "paddw %%mm1, %%mm4 \n\t" 2235 "paddw %%mm1, %%mm4 \n\t"
2257 "pmaddwd %%mm5, %%mm1 \n\t" 2257 "pmaddwd %%mm5, %%mm1 \n\t"
2258 "packssdw %%mm1, %%mm0 \n\t" // V1 V0 U1 U0 2258 "packssdw %%mm1, %%mm0 \n\t" // V1 V0 U1 U0
2259 "psraw $7, %%mm0 \n\t" 2259 "psraw $7, %%mm0 \n\t"
2260 2260
2261 #if defined (HAVE_MMX2) || defined (HAVE_3DNOW) 2261 #if defined (HAVE_MMX2) || defined (HAVE_3DNOW)
2262 "movq 12(%0, %%"REG_b"), %%mm4 \n\t" 2262 "movq 12(%0, %%"REG_d"), %%mm4 \n\t"
2263 "movq 12(%1, %%"REG_b"), %%mm1 \n\t" 2263 "movq 12(%1, %%"REG_d"), %%mm1 \n\t"
2264 "movq 18(%0, %%"REG_b"), %%mm2 \n\t" 2264 "movq 18(%0, %%"REG_d"), %%mm2 \n\t"
2265 "movq 18(%1, %%"REG_b"), %%mm3 \n\t" 2265 "movq 18(%1, %%"REG_d"), %%mm3 \n\t"
2266 PAVGB" %%mm1, %%mm4 \n\t" 2266 PAVGB" %%mm1, %%mm4 \n\t"
2267 PAVGB" %%mm3, %%mm2 \n\t" 2267 PAVGB" %%mm3, %%mm2 \n\t"
2268 "movq %%mm4, %%mm1 \n\t" 2268 "movq %%mm4, %%mm1 \n\t"
2269 "movq %%mm2, %%mm3 \n\t" 2269 "movq %%mm2, %%mm3 \n\t"
2270 "psrlq $24, %%mm4 \n\t" 2270 "psrlq $24, %%mm4 \n\t"
2272 PAVGB" %%mm1, %%mm4 \n\t" 2272 PAVGB" %%mm1, %%mm4 \n\t"
2273 PAVGB" %%mm3, %%mm2 \n\t" 2273 PAVGB" %%mm3, %%mm2 \n\t"
2274 "punpcklbw %%mm7, %%mm4 \n\t" 2274 "punpcklbw %%mm7, %%mm4 \n\t"
2275 "punpcklbw %%mm7, %%mm2 \n\t" 2275 "punpcklbw %%mm7, %%mm2 \n\t"
2276 #else 2276 #else
2277 "movd 12(%0, %%"REG_b"), %%mm4 \n\t" 2277 "movd 12(%0, %%"REG_d"), %%mm4 \n\t"
2278 "movd 12(%1, %%"REG_b"), %%mm1 \n\t" 2278 "movd 12(%1, %%"REG_d"), %%mm1 \n\t"
2279 "movd 15(%0, %%"REG_b"), %%mm2 \n\t" 2279 "movd 15(%0, %%"REG_d"), %%mm2 \n\t"
2280 "movd 15(%1, %%"REG_b"), %%mm3 \n\t" 2280 "movd 15(%1, %%"REG_d"), %%mm3 \n\t"
2281 "punpcklbw %%mm7, %%mm4 \n\t" 2281 "punpcklbw %%mm7, %%mm4 \n\t"
2282 "punpcklbw %%mm7, %%mm1 \n\t" 2282 "punpcklbw %%mm7, %%mm1 \n\t"
2283 "punpcklbw %%mm7, %%mm2 \n\t" 2283 "punpcklbw %%mm7, %%mm2 \n\t"
2284 "punpcklbw %%mm7, %%mm3 \n\t" 2284 "punpcklbw %%mm7, %%mm3 \n\t"
2285 "paddw %%mm1, %%mm4 \n\t" 2285 "paddw %%mm1, %%mm4 \n\t"
2286 "paddw %%mm3, %%mm2 \n\t" 2286 "paddw %%mm3, %%mm2 \n\t"
2287 "paddw %%mm2, %%mm4 \n\t" 2287 "paddw %%mm2, %%mm4 \n\t"
2288 "movd 18(%0, %%"REG_b"), %%mm5 \n\t" 2288 "movd 18(%0, %%"REG_d"), %%mm5 \n\t"
2289 "movd 18(%1, %%"REG_b"), %%mm1 \n\t" 2289 "movd 18(%1, %%"REG_d"), %%mm1 \n\t"
2290 "movd 21(%0, %%"REG_b"), %%mm2 \n\t" 2290 "movd 21(%0, %%"REG_d"), %%mm2 \n\t"
2291 "movd 21(%1, %%"REG_b"), %%mm3 \n\t" 2291 "movd 21(%1, %%"REG_d"), %%mm3 \n\t"
2292 "punpcklbw %%mm7, %%mm5 \n\t" 2292 "punpcklbw %%mm7, %%mm5 \n\t"
2293 "punpcklbw %%mm7, %%mm1 \n\t" 2293 "punpcklbw %%mm7, %%mm1 \n\t"
2294 "punpcklbw %%mm7, %%mm2 \n\t" 2294 "punpcklbw %%mm7, %%mm2 \n\t"
2295 "punpcklbw %%mm7, %%mm3 \n\t" 2295 "punpcklbw %%mm7, %%mm3 \n\t"
2296 "paddw %%mm1, %%mm5 \n\t" 2296 "paddw %%mm1, %%mm5 \n\t"
2315 #endif 2315 #endif
2316 "packssdw %%mm2, %%mm4 \n\t" 2316 "packssdw %%mm2, %%mm4 \n\t"
2317 "packssdw %%mm3, %%mm1 \n\t" 2317 "packssdw %%mm3, %%mm1 \n\t"
2318 "pmaddwd %%mm5, %%mm4 \n\t" 2318 "pmaddwd %%mm5, %%mm4 \n\t"
2319 "pmaddwd %%mm5, %%mm1 \n\t" 2319 "pmaddwd %%mm5, %%mm1 \n\t"
2320 "add $24, %%"REG_b" \n\t" 2320 "add $24, %%"REG_d" \n\t"
2321 "packssdw %%mm1, %%mm4 \n\t" // V3 V2 U3 U2 2321 "packssdw %%mm1, %%mm4 \n\t" // V3 V2 U3 U2
2322 "psraw $7, %%mm4 \n\t" 2322 "psraw $7, %%mm4 \n\t"
2323 2323
2324 "movq %%mm0, %%mm1 \n\t" 2324 "movq %%mm0, %%mm1 \n\t"
2325 "punpckldq %%mm4, %%mm0 \n\t" 2325 "punpckldq %%mm4, %%mm0 \n\t"
2330 "punpckhdq %%mm0, %%mm0 \n\t" 2330 "punpckhdq %%mm0, %%mm0 \n\t"
2331 "movd %%mm0, (%3, %%"REG_a") \n\t" 2331 "movd %%mm0, (%3, %%"REG_a") \n\t"
2332 "add $4, %%"REG_a" \n\t" 2332 "add $4, %%"REG_a" \n\t"
2333 " js 1b \n\t" 2333 " js 1b \n\t"
2334 : : "r" (src+chromWidth*6), "r" (src+srcStride+chromWidth*6), "r" (udst+chromWidth), "r" (vdst+chromWidth), "g" (-chromWidth) 2334 : : "r" (src+chromWidth*6), "r" (src+srcStride+chromWidth*6), "r" (udst+chromWidth), "r" (vdst+chromWidth), "g" (-chromWidth)
2335 : "%"REG_a, "%"REG_b 2335 : "%"REG_a, "%"REG_d
2336 ); 2336 );
2337 2337
2338 udst += chromStride; 2338 udst += chromStride;
2339 vdst += chromStride; 2339 vdst += chromStride;
2340 src += srcStride*2; 2340 src += srcStride*2;