Mercurial > mplayer.hg
comparison libswscale/swscale_template.c @ 29465:45e78d49e493
Rename "funny" code to "mmx2 filter" code.
author | ramiro |
---|---|
date | Thu, 13 Aug 2009 18:28:17 +0000 |
parents | 0673fad0546f |
children | 8d73112b7589 |
comparison
equal
deleted
inserted
replaced
29464:32ee4e7438ac | 29465:45e78d49e493 |
---|---|
2230 uint32_t *pal, int isAlpha) | 2230 uint32_t *pal, int isAlpha) |
2231 { | 2231 { |
2232 int32_t av_unused *mmx2FilterPos = c->lumMmx2FilterPos; | 2232 int32_t av_unused *mmx2FilterPos = c->lumMmx2FilterPos; |
2233 int16_t av_unused *mmx2Filter = c->lumMmx2Filter; | 2233 int16_t av_unused *mmx2Filter = c->lumMmx2Filter; |
2234 int av_unused canMMX2BeUsed = c->canMMX2BeUsed; | 2234 int av_unused canMMX2BeUsed = c->canMMX2BeUsed; |
2235 void av_unused *funnyYCode = c->funnyYCode; | 2235 void av_unused *mmx2FilterCode= c->lumMmx2FilterCode; |
2236 void (*internal_func)(uint8_t *, const uint8_t *, long, uint32_t *) = isAlpha ? c->hascale_internal : c->hyscale_internal; | 2236 void (*internal_func)(uint8_t *, const uint8_t *, long, uint32_t *) = isAlpha ? c->hascale_internal : c->hyscale_internal; |
2237 | 2237 |
2238 if (isAlpha) { | 2238 if (isAlpha) { |
2239 if (srcFormat == PIX_FMT_RGB32 || srcFormat == PIX_FMT_BGR32 ) | 2239 if (srcFormat == PIX_FMT_RGB32 || srcFormat == PIX_FMT_BGR32 ) |
2240 src += 3; | 2240 src += 3; |
2284 PREFETCH" 32(%%"REG_c") \n\t" | 2284 PREFETCH" 32(%%"REG_c") \n\t" |
2285 PREFETCH" 64(%%"REG_c") \n\t" | 2285 PREFETCH" 64(%%"REG_c") \n\t" |
2286 | 2286 |
2287 #if ARCH_X86_64 | 2287 #if ARCH_X86_64 |
2288 | 2288 |
2289 #define FUNNY_Y_CODE \ | 2289 #define CALL_MMX2_FILTER_CODE \ |
2290 "movl (%%"REG_b"), %%esi \n\t"\ | 2290 "movl (%%"REG_b"), %%esi \n\t"\ |
2291 "call *%4 \n\t"\ | 2291 "call *%4 \n\t"\ |
2292 "movl (%%"REG_b", %%"REG_a"), %%esi \n\t"\ | 2292 "movl (%%"REG_b", %%"REG_a"), %%esi \n\t"\ |
2293 "add %%"REG_S", %%"REG_c" \n\t"\ | 2293 "add %%"REG_S", %%"REG_c" \n\t"\ |
2294 "add %%"REG_a", %%"REG_D" \n\t"\ | 2294 "add %%"REG_a", %%"REG_D" \n\t"\ |
2295 "xor %%"REG_a", %%"REG_a" \n\t"\ | 2295 "xor %%"REG_a", %%"REG_a" \n\t"\ |
2296 | 2296 |
2297 #else | 2297 #else |
2298 | 2298 |
2299 #define FUNNY_Y_CODE \ | 2299 #define CALL_MMX2_FILTER_CODE \ |
2300 "movl (%%"REG_b"), %%esi \n\t"\ | 2300 "movl (%%"REG_b"), %%esi \n\t"\ |
2301 "call *%4 \n\t"\ | 2301 "call *%4 \n\t"\ |
2302 "addl (%%"REG_b", %%"REG_a"), %%"REG_c" \n\t"\ | 2302 "addl (%%"REG_b", %%"REG_a"), %%"REG_c" \n\t"\ |
2303 "add %%"REG_a", %%"REG_D" \n\t"\ | 2303 "add %%"REG_a", %%"REG_D" \n\t"\ |
2304 "xor %%"REG_a", %%"REG_a" \n\t"\ | 2304 "xor %%"REG_a", %%"REG_a" \n\t"\ |
2305 | 2305 |
2306 #endif /* ARCH_X86_64 */ | 2306 #endif /* ARCH_X86_64 */ |
2307 | 2307 |
2308 FUNNY_Y_CODE | 2308 CALL_MMX2_FILTER_CODE |
2309 FUNNY_Y_CODE | 2309 CALL_MMX2_FILTER_CODE |
2310 FUNNY_Y_CODE | 2310 CALL_MMX2_FILTER_CODE |
2311 FUNNY_Y_CODE | 2311 CALL_MMX2_FILTER_CODE |
2312 FUNNY_Y_CODE | 2312 CALL_MMX2_FILTER_CODE |
2313 FUNNY_Y_CODE | 2313 CALL_MMX2_FILTER_CODE |
2314 FUNNY_Y_CODE | 2314 CALL_MMX2_FILTER_CODE |
2315 FUNNY_Y_CODE | 2315 CALL_MMX2_FILTER_CODE |
2316 | 2316 |
2317 #if defined(PIC) | 2317 #if defined(PIC) |
2318 "mov %5, %%"REG_b" \n\t" | 2318 "mov %5, %%"REG_b" \n\t" |
2319 #endif | 2319 #endif |
2320 :: "m" (src), "m" (dst), "m" (mmx2Filter), "m" (mmx2FilterPos), | 2320 :: "m" (src), "m" (dst), "m" (mmx2Filter), "m" (mmx2FilterPos), |
2321 "m" (funnyYCode) | 2321 "m" (mmx2FilterCode) |
2322 #if defined(PIC) | 2322 #if defined(PIC) |
2323 ,"m" (ebxsave) | 2323 ,"m" (ebxsave) |
2324 #endif | 2324 #endif |
2325 : "%"REG_a, "%"REG_c, "%"REG_d, "%"REG_S, "%"REG_D | 2325 : "%"REG_a, "%"REG_c, "%"REG_d, "%"REG_S, "%"REG_D |
2326 #if !defined(PIC) | 2326 #if !defined(PIC) |
2413 uint32_t *pal) | 2413 uint32_t *pal) |
2414 { | 2414 { |
2415 int32_t av_unused *mmx2FilterPos = c->chrMmx2FilterPos; | 2415 int32_t av_unused *mmx2FilterPos = c->chrMmx2FilterPos; |
2416 int16_t av_unused *mmx2Filter = c->chrMmx2Filter; | 2416 int16_t av_unused *mmx2Filter = c->chrMmx2Filter; |
2417 int av_unused canMMX2BeUsed = c->canMMX2BeUsed; | 2417 int av_unused canMMX2BeUsed = c->canMMX2BeUsed; |
2418 void av_unused *funnyUVCode = c->funnyUVCode; | 2418 void av_unused *mmx2FilterCode= c->chrMmx2FilterCode; |
2419 | 2419 |
2420 if (isGray(srcFormat) || srcFormat==PIX_FMT_MONOBLACK || srcFormat==PIX_FMT_MONOWHITE) | 2420 if (isGray(srcFormat) || srcFormat==PIX_FMT_MONOBLACK || srcFormat==PIX_FMT_MONOWHITE) |
2421 return; | 2421 return; |
2422 | 2422 |
2423 if (srcFormat==PIX_FMT_RGB32_1 || srcFormat==PIX_FMT_BGR32_1) { | 2423 if (srcFormat==PIX_FMT_RGB32_1 || srcFormat==PIX_FMT_BGR32_1) { |
2470 PREFETCH" 32(%%"REG_c") \n\t" | 2470 PREFETCH" 32(%%"REG_c") \n\t" |
2471 PREFETCH" 64(%%"REG_c") \n\t" | 2471 PREFETCH" 64(%%"REG_c") \n\t" |
2472 | 2472 |
2473 #if ARCH_X86_64 | 2473 #if ARCH_X86_64 |
2474 | 2474 |
2475 #define FUNNY_UV_CODE \ | 2475 #define CALL_MMX2_FILTER_CODE \ |
2476 "movl (%%"REG_b"), %%esi \n\t"\ | 2476 "movl (%%"REG_b"), %%esi \n\t"\ |
2477 "call *%4 \n\t"\ | 2477 "call *%4 \n\t"\ |
2478 "movl (%%"REG_b", %%"REG_a"), %%esi \n\t"\ | 2478 "movl (%%"REG_b", %%"REG_a"), %%esi \n\t"\ |
2479 "add %%"REG_S", %%"REG_c" \n\t"\ | 2479 "add %%"REG_S", %%"REG_c" \n\t"\ |
2480 "add %%"REG_a", %%"REG_D" \n\t"\ | 2480 "add %%"REG_a", %%"REG_D" \n\t"\ |
2481 "xor %%"REG_a", %%"REG_a" \n\t"\ | 2481 "xor %%"REG_a", %%"REG_a" \n\t"\ |
2482 | 2482 |
2483 #else | 2483 #else |
2484 | 2484 |
2485 #define FUNNY_UV_CODE \ | 2485 #define CALL_MMX2_FILTER_CODE \ |
2486 "movl (%%"REG_b"), %%esi \n\t"\ | 2486 "movl (%%"REG_b"), %%esi \n\t"\ |
2487 "call *%4 \n\t"\ | 2487 "call *%4 \n\t"\ |
2488 "addl (%%"REG_b", %%"REG_a"), %%"REG_c" \n\t"\ | 2488 "addl (%%"REG_b", %%"REG_a"), %%"REG_c" \n\t"\ |
2489 "add %%"REG_a", %%"REG_D" \n\t"\ | 2489 "add %%"REG_a", %%"REG_D" \n\t"\ |
2490 "xor %%"REG_a", %%"REG_a" \n\t"\ | 2490 "xor %%"REG_a", %%"REG_a" \n\t"\ |
2491 | 2491 |
2492 #endif /* ARCH_X86_64 */ | 2492 #endif /* ARCH_X86_64 */ |
2493 | 2493 |
2494 FUNNY_UV_CODE | 2494 CALL_MMX2_FILTER_CODE |
2495 FUNNY_UV_CODE | 2495 CALL_MMX2_FILTER_CODE |
2496 FUNNY_UV_CODE | 2496 CALL_MMX2_FILTER_CODE |
2497 FUNNY_UV_CODE | 2497 CALL_MMX2_FILTER_CODE |
2498 "xor %%"REG_a", %%"REG_a" \n\t" // i | 2498 "xor %%"REG_a", %%"REG_a" \n\t" // i |
2499 "mov %5, %%"REG_c" \n\t" // src | 2499 "mov %5, %%"REG_c" \n\t" // src |
2500 "mov %1, %%"REG_D" \n\t" // buf1 | 2500 "mov %1, %%"REG_D" \n\t" // buf1 |
2501 "add $"AV_STRINGIFY(VOF)", %%"REG_D" \n\t" | 2501 "add $"AV_STRINGIFY(VOF)", %%"REG_D" \n\t" |
2502 PREFETCH" (%%"REG_c") \n\t" | 2502 PREFETCH" (%%"REG_c") \n\t" |
2503 PREFETCH" 32(%%"REG_c") \n\t" | 2503 PREFETCH" 32(%%"REG_c") \n\t" |
2504 PREFETCH" 64(%%"REG_c") \n\t" | 2504 PREFETCH" 64(%%"REG_c") \n\t" |
2505 | 2505 |
2506 FUNNY_UV_CODE | 2506 CALL_MMX2_FILTER_CODE |
2507 FUNNY_UV_CODE | 2507 CALL_MMX2_FILTER_CODE |
2508 FUNNY_UV_CODE | 2508 CALL_MMX2_FILTER_CODE |
2509 FUNNY_UV_CODE | 2509 CALL_MMX2_FILTER_CODE |
2510 | 2510 |
2511 #if defined(PIC) | 2511 #if defined(PIC) |
2512 "mov %6, %%"REG_b" \n\t" | 2512 "mov %6, %%"REG_b" \n\t" |
2513 #endif | 2513 #endif |
2514 :: "m" (src1), "m" (dst), "m" (mmx2Filter), "m" (mmx2FilterPos), | 2514 :: "m" (src1), "m" (dst), "m" (mmx2Filter), "m" (mmx2FilterPos), |
2515 "m" (funnyUVCode), "m" (src2) | 2515 "m" (mmx2FilterCode), "m" (src2) |
2516 #if defined(PIC) | 2516 #if defined(PIC) |
2517 ,"m" (ebxsave) | 2517 ,"m" (ebxsave) |
2518 #endif | 2518 #endif |
2519 : "%"REG_a, "%"REG_c, "%"REG_d, "%"REG_S, "%"REG_D | 2519 : "%"REG_a, "%"REG_c, "%"REG_d, "%"REG_S, "%"REG_D |
2520 #if !defined(PIC) | 2520 #if !defined(PIC) |