Commit 46fe31a0 authored by Michael Niedermayer's avatar Michael Niedermayer

removing esp usage

this is certainly not the most beautifull but it should work without -fomit-frame-pointer and PIC and gcc-4 vomits when ebp is given in a constraint directly even with -fomi-frame-pointer so theres not that much choice ...
if anyone knows a simpler/cleaner solution, dont hesitate to suggest it ...

Originally committed as revision 18393 to svn://svn.mplayerhq.hu/mplayer/trunk/postproc
parent 09786209
...@@ -1218,34 +1218,37 @@ FULL_YSCALEYUV2RGB ...@@ -1218,34 +1218,37 @@ FULL_YSCALEYUV2RGB
//Note 8280 == DSTW_OFFSET but the preprocessor can't handle that there :( //Note 8280 == DSTW_OFFSET but the preprocessor can't handle that there :(
case IMGFMT_BGR32: case IMGFMT_BGR32:
asm volatile( asm volatile(
"mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
"mov %4, %%"REG_SP" \n\t" "mov %4, %%"REG_b" \n\t"
YSCALEYUV2RGB(%%REGa, %5) "push %%"REG_BP" \n\t"
WRITEBGR32(%%REGSP, 8280(%5), %%REGa) YSCALEYUV2RGB(%%REGBP, %5)
"mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" WRITEBGR32(%%REGb, 8280(%5), %%REGBP)
"pop %%"REG_BP" \n\t"
:: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t"
"r" (&c->redDither)
: "%"REG_a :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
"a" (&c->redDither)
); );
return; return;
case IMGFMT_BGR24: case IMGFMT_BGR24:
asm volatile( asm volatile(
"mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
"mov %4, %%"REG_SP" \n\t" "mov %4, %%"REG_b" \n\t"
YSCALEYUV2RGB(%%REGa, %5) "push %%"REG_BP" \n\t"
WRITEBGR24(%%REGSP, 8280(%5), %%REGa) YSCALEYUV2RGB(%%REGBP, %5)
"mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" WRITEBGR24(%%REGb, 8280(%5), %%REGBP)
:: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), "pop %%"REG_BP" \n\t"
"r" (&c->redDither) "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t"
: "%"REG_a :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
"a" (&c->redDither)
); );
return; return;
case IMGFMT_BGR15: case IMGFMT_BGR15:
asm volatile( asm volatile(
"mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
"mov %4, %%"REG_SP" \n\t" "mov %4, %%"REG_b" \n\t"
YSCALEYUV2RGB(%%REGa, %5) "push %%"REG_BP" \n\t"
YSCALEYUV2RGB(%%REGBP, %5)
/* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */ /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
#ifdef DITHER1XBPP #ifdef DITHER1XBPP
"paddusb "MANGLE(b5Dither)", %%mm2\n\t" "paddusb "MANGLE(b5Dither)", %%mm2\n\t"
...@@ -1253,19 +1256,20 @@ FULL_YSCALEYUV2RGB ...@@ -1253,19 +1256,20 @@ FULL_YSCALEYUV2RGB
"paddusb "MANGLE(r5Dither)", %%mm5\n\t" "paddusb "MANGLE(r5Dither)", %%mm5\n\t"
#endif #endif
WRITEBGR15(%%REGSP, 8280(%5), %%REGa) WRITEBGR15(%%REGb, 8280(%5), %%REGBP)
"mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" "pop %%"REG_BP" \n\t"
"mov "ESP_OFFSET"(%5), %%"REG_b" \n\t"
:: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
"r" (&c->redDither) "a" (&c->redDither)
: "%"REG_a
); );
return; return;
case IMGFMT_BGR16: case IMGFMT_BGR16:
asm volatile( asm volatile(
"mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
"mov %4, %%"REG_SP" \n\t" "mov %4, %%"REG_b" \n\t"
YSCALEYUV2RGB(%%REGa, %5) "push %%"REG_BP" \n\t"
YSCALEYUV2RGB(%%REGBP, %5)
/* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */ /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
#ifdef DITHER1XBPP #ifdef DITHER1XBPP
"paddusb "MANGLE(b5Dither)", %%mm2\n\t" "paddusb "MANGLE(b5Dither)", %%mm2\n\t"
...@@ -1273,23 +1277,24 @@ FULL_YSCALEYUV2RGB ...@@ -1273,23 +1277,24 @@ FULL_YSCALEYUV2RGB
"paddusb "MANGLE(r5Dither)", %%mm5\n\t" "paddusb "MANGLE(r5Dither)", %%mm5\n\t"
#endif #endif
WRITEBGR16(%%REGSP, 8280(%5), %%REGa) WRITEBGR16(%%REGb, 8280(%5), %%REGBP)
"mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" "pop %%"REG_BP" \n\t"
:: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t"
"r" (&c->redDither) :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
: "%"REG_a "a" (&c->redDither)
); );
return; return;
case IMGFMT_YUY2: case IMGFMT_YUY2:
asm volatile( asm volatile(
"mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
"mov %4, %%"REG_SP" \n\t" "mov %4, %%"REG_b" \n\t"
YSCALEYUV2PACKED(%%REGa, %5) "push %%"REG_BP" \n\t"
WRITEYUY2(%%REGSP, 8280(%5), %%REGa) YSCALEYUV2PACKED(%%REGBP, %5)
"mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" WRITEYUY2(%%REGb, 8280(%5), %%REGBP)
:: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), "pop %%"REG_BP" \n\t"
"r" (&c->redDither) "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t"
: "%"REG_a :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
"a" (&c->redDither)
); );
return; return;
default: break; default: break;
...@@ -1323,54 +1328,58 @@ static inline void RENAME(yuv2packed1)(SwsContext *c, uint16_t *buf0, uint16_t * ...@@ -1323,54 +1328,58 @@ static inline void RENAME(yuv2packed1)(SwsContext *c, uint16_t *buf0, uint16_t *
{ {
case IMGFMT_BGR32: case IMGFMT_BGR32:
asm volatile( asm volatile(
"mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
"mov %4, %%"REG_SP" \n\t" "mov %4, %%"REG_b" \n\t"
YSCALEYUV2RGB1(%%REGa, %5) "push %%"REG_BP" \n\t"
WRITEBGR32(%%REGSP, 8280(%5), %%REGa) YSCALEYUV2RGB1(%%REGBP, %5)
"mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" WRITEBGR32(%%REGb, 8280(%5), %%REGBP)
"pop %%"REG_BP" \n\t"
:: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t"
"r" (&c->redDither)
: "%"REG_a :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
"a" (&c->redDither)
); );
return; return;
case IMGFMT_BGR24: case IMGFMT_BGR24:
asm volatile( asm volatile(
"mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
"mov %4, %%"REG_SP" \n\t" "mov %4, %%"REG_b" \n\t"
YSCALEYUV2RGB1(%%REGa, %5) "push %%"REG_BP" \n\t"
WRITEBGR24(%%REGSP, 8280(%5), %%REGa) YSCALEYUV2RGB1(%%REGBP, %5)
"mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" WRITEBGR24(%%REGb, 8280(%5), %%REGBP)
"pop %%"REG_BP" \n\t"
:: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t"
"r" (&c->redDither)
: "%"REG_a :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
"a" (&c->redDither)
); );
return; return;
case IMGFMT_BGR15: case IMGFMT_BGR15:
asm volatile( asm volatile(
"mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
"mov %4, %%"REG_SP" \n\t" "mov %4, %%"REG_b" \n\t"
YSCALEYUV2RGB1(%%REGa, %5) "push %%"REG_BP" \n\t"
YSCALEYUV2RGB1(%%REGBP, %5)
/* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */ /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
#ifdef DITHER1XBPP #ifdef DITHER1XBPP
"paddusb "MANGLE(b5Dither)", %%mm2\n\t" "paddusb "MANGLE(b5Dither)", %%mm2\n\t"
"paddusb "MANGLE(g5Dither)", %%mm4\n\t" "paddusb "MANGLE(g5Dither)", %%mm4\n\t"
"paddusb "MANGLE(r5Dither)", %%mm5\n\t" "paddusb "MANGLE(r5Dither)", %%mm5\n\t"
#endif #endif
WRITEBGR15(%%REGSP, 8280(%5), %%REGa) WRITEBGR15(%%REGb, 8280(%5), %%REGBP)
"mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" "pop %%"REG_BP" \n\t"
"mov "ESP_OFFSET"(%5), %%"REG_b" \n\t"
:: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
"r" (&c->redDither) "a" (&c->redDither)
: "%"REG_a
); );
return; return;
case IMGFMT_BGR16: case IMGFMT_BGR16:
asm volatile( asm volatile(
"mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
"mov %4, %%"REG_SP" \n\t" "mov %4, %%"REG_b" \n\t"
YSCALEYUV2RGB1(%%REGa, %5) "push %%"REG_BP" \n\t"
YSCALEYUV2RGB1(%%REGBP, %5)
/* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */ /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
#ifdef DITHER1XBPP #ifdef DITHER1XBPP
"paddusb "MANGLE(b5Dither)", %%mm2\n\t" "paddusb "MANGLE(b5Dither)", %%mm2\n\t"
...@@ -1378,25 +1387,26 @@ static inline void RENAME(yuv2packed1)(SwsContext *c, uint16_t *buf0, uint16_t * ...@@ -1378,25 +1387,26 @@ static inline void RENAME(yuv2packed1)(SwsContext *c, uint16_t *buf0, uint16_t *
"paddusb "MANGLE(r5Dither)", %%mm5\n\t" "paddusb "MANGLE(r5Dither)", %%mm5\n\t"
#endif #endif
WRITEBGR16(%%REGSP, 8280(%5), %%REGa) WRITEBGR16(%%REGb, 8280(%5), %%REGBP)
"mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" "pop %%"REG_BP" \n\t"
"mov "ESP_OFFSET"(%5), %%"REG_b" \n\t"
:: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
"r" (&c->redDither) "a" (&c->redDither)
: "%"REG_a
); );
return; return;
case IMGFMT_YUY2: case IMGFMT_YUY2:
asm volatile( asm volatile(
"mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
"mov %4, %%"REG_SP" \n\t" "mov %4, %%"REG_b" \n\t"
YSCALEYUV2PACKED1(%%REGa, %5) "push %%"REG_BP" \n\t"
WRITEYUY2(%%REGSP, 8280(%5), %%REGa) YSCALEYUV2PACKED1(%%REGBP, %5)
"mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" WRITEYUY2(%%REGb, 8280(%5), %%REGBP)
"pop %%"REG_BP" \n\t"
:: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t"
"r" (&c->redDither)
: "%"REG_a :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
"a" (&c->redDither)
); );
return; return;
} }
...@@ -1407,54 +1417,58 @@ static inline void RENAME(yuv2packed1)(SwsContext *c, uint16_t *buf0, uint16_t * ...@@ -1407,54 +1417,58 @@ static inline void RENAME(yuv2packed1)(SwsContext *c, uint16_t *buf0, uint16_t *
{ {
case IMGFMT_BGR32: case IMGFMT_BGR32:
asm volatile( asm volatile(
"mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
"mov %4, %%"REG_SP" \n\t" "mov %4, %%"REG_b" \n\t"
YSCALEYUV2RGB1b(%%REGa, %5) "push %%"REG_BP" \n\t"
WRITEBGR32(%%REGSP, 8280(%5), %%REGa) YSCALEYUV2RGB1b(%%REGBP, %5)
"mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" WRITEBGR32(%%REGb, 8280(%5), %%REGBP)
"pop %%"REG_BP" \n\t"
:: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t"
"r" (&c->redDither)
: "%"REG_a :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
"a" (&c->redDither)
); );
return; return;
case IMGFMT_BGR24: case IMGFMT_BGR24:
asm volatile( asm volatile(
"mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
"mov %4, %%"REG_SP" \n\t" "mov %4, %%"REG_b" \n\t"
YSCALEYUV2RGB1b(%%REGa, %5) "push %%"REG_BP" \n\t"
WRITEBGR24(%%REGSP, 8280(%5), %%REGa) YSCALEYUV2RGB1b(%%REGBP, %5)
"mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" WRITEBGR24(%%REGb, 8280(%5), %%REGBP)
"pop %%"REG_BP" \n\t"
:: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t"
"r" (&c->redDither)
: "%"REG_a :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
"a" (&c->redDither)
); );
return; return;
case IMGFMT_BGR15: case IMGFMT_BGR15:
asm volatile( asm volatile(
"mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
"mov %4, %%"REG_SP" \n\t" "mov %4, %%"REG_b" \n\t"
YSCALEYUV2RGB1b(%%REGa, %5) "push %%"REG_BP" \n\t"
YSCALEYUV2RGB1b(%%REGBP, %5)
/* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */ /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
#ifdef DITHER1XBPP #ifdef DITHER1XBPP
"paddusb "MANGLE(b5Dither)", %%mm2\n\t" "paddusb "MANGLE(b5Dither)", %%mm2\n\t"
"paddusb "MANGLE(g5Dither)", %%mm4\n\t" "paddusb "MANGLE(g5Dither)", %%mm4\n\t"
"paddusb "MANGLE(r5Dither)", %%mm5\n\t" "paddusb "MANGLE(r5Dither)", %%mm5\n\t"
#endif #endif
WRITEBGR15(%%REGSP, 8280(%5), %%REGa) WRITEBGR15(%%REGb, 8280(%5), %%REGBP)
"mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" "pop %%"REG_BP" \n\t"
"mov "ESP_OFFSET"(%5), %%"REG_b" \n\t"
:: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
"r" (&c->redDither) "a" (&c->redDither)
: "%"REG_a
); );
return; return;
case IMGFMT_BGR16: case IMGFMT_BGR16:
asm volatile( asm volatile(
"mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
"mov %4, %%"REG_SP" \n\t" "mov %4, %%"REG_b" \n\t"
YSCALEYUV2RGB1b(%%REGa, %5) "push %%"REG_BP" \n\t"
YSCALEYUV2RGB1b(%%REGBP, %5)
/* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */ /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
#ifdef DITHER1XBPP #ifdef DITHER1XBPP
"paddusb "MANGLE(b5Dither)", %%mm2\n\t" "paddusb "MANGLE(b5Dither)", %%mm2\n\t"
...@@ -1462,25 +1476,26 @@ static inline void RENAME(yuv2packed1)(SwsContext *c, uint16_t *buf0, uint16_t * ...@@ -1462,25 +1476,26 @@ static inline void RENAME(yuv2packed1)(SwsContext *c, uint16_t *buf0, uint16_t *
"paddusb "MANGLE(r5Dither)", %%mm5\n\t" "paddusb "MANGLE(r5Dither)", %%mm5\n\t"
#endif #endif
WRITEBGR16(%%REGSP, 8280(%5), %%REGa) WRITEBGR16(%%REGb, 8280(%5), %%REGBP)
"mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" "pop %%"REG_BP" \n\t"
"mov "ESP_OFFSET"(%5), %%"REG_b" \n\t"
:: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
"r" (&c->redDither) "a" (&c->redDither)
: "%"REG_a
); );
return; return;
case IMGFMT_YUY2: case IMGFMT_YUY2:
asm volatile( asm volatile(
"mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
"mov %4, %%"REG_SP" \n\t" "mov %4, %%"REG_b" \n\t"
YSCALEYUV2PACKED1b(%%REGa, %5) "push %%"REG_BP" \n\t"
WRITEYUY2(%%REGSP, 8280(%5), %%REGa) YSCALEYUV2PACKED1b(%%REGBP, %5)
"mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" WRITEYUY2(%%REGb, 8280(%5), %%REGBP)
"pop %%"REG_BP" \n\t"
:: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t"
"r" (&c->redDither)
: "%"REG_a :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
"a" (&c->redDither)
); );
return; return;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment