Mercurial > mplayer.hg
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; |