forked from FFmpeg/FFmpeg
Replace some "m" constraints by MANGLE to avoid issues with some compilers not
being able to compile it and deduplicate the code at the same time. Originally committed as revision 30978 to svn://svn.mplayerhq.hu/mplayer/trunk/libswscale
This commit is contained in:
parent
c7512f6bb3
commit
5b03661fa7
1 changed files with 43 additions and 106 deletions
|
@ -122,6 +122,43 @@ static inline void RENAME(rgb24tobgr32)(const uint8_t *src, uint8_t *dst, long s
|
|||
}
|
||||
}
|
||||
|
||||
#define STORE_BGR24_MMX \
|
||||
"psrlq $8, %%mm2 \n\t" \
|
||||
"psrlq $8, %%mm3 \n\t" \
|
||||
"psrlq $8, %%mm6 \n\t" \
|
||||
"psrlq $8, %%mm7 \n\t" \
|
||||
"pand "MANGLE(mask24l)", %%mm0\n\t" \
|
||||
"pand "MANGLE(mask24l)", %%mm1\n\t" \
|
||||
"pand "MANGLE(mask24l)", %%mm4\n\t" \
|
||||
"pand "MANGLE(mask24l)", %%mm5\n\t" \
|
||||
"pand "MANGLE(mask24h)", %%mm2\n\t" \
|
||||
"pand "MANGLE(mask24h)", %%mm3\n\t" \
|
||||
"pand "MANGLE(mask24h)", %%mm6\n\t" \
|
||||
"pand "MANGLE(mask24h)", %%mm7\n\t" \
|
||||
"por %%mm2, %%mm0 \n\t" \
|
||||
"por %%mm3, %%mm1 \n\t" \
|
||||
"por %%mm6, %%mm4 \n\t" \
|
||||
"por %%mm7, %%mm5 \n\t" \
|
||||
\
|
||||
"movq %%mm1, %%mm2 \n\t" \
|
||||
"movq %%mm4, %%mm3 \n\t" \
|
||||
"psllq $48, %%mm2 \n\t" \
|
||||
"psllq $32, %%mm3 \n\t" \
|
||||
"pand "MANGLE(mask24hh)", %%mm2\n\t" \
|
||||
"pand "MANGLE(mask24hhh)", %%mm3\n\t" \
|
||||
"por %%mm2, %%mm0 \n\t" \
|
||||
"psrlq $16, %%mm1 \n\t" \
|
||||
"psrlq $32, %%mm4 \n\t" \
|
||||
"psllq $16, %%mm5 \n\t" \
|
||||
"por %%mm3, %%mm1 \n\t" \
|
||||
"pand "MANGLE(mask24hhhh)", %%mm5\n\t" \
|
||||
"por %%mm5, %%mm4 \n\t" \
|
||||
\
|
||||
MOVNTQ" %%mm0, %0 \n\t" \
|
||||
MOVNTQ" %%mm1, 8%0 \n\t" \
|
||||
MOVNTQ" %%mm4, 16%0"
|
||||
|
||||
|
||||
static inline void RENAME(rgb32tobgr24)(const uint8_t *src, uint8_t *dst, long src_size)
|
||||
{
|
||||
uint8_t *dest = dst;
|
||||
|
@ -145,43 +182,9 @@ static inline void RENAME(rgb32tobgr24)(const uint8_t *src, uint8_t *dst, long s
|
|||
"movq %%mm1, %%mm3 \n\t"
|
||||
"movq %%mm4, %%mm6 \n\t"
|
||||
"movq %%mm5, %%mm7 \n\t"
|
||||
"psrlq $8, %%mm2 \n\t"
|
||||
"psrlq $8, %%mm3 \n\t"
|
||||
"psrlq $8, %%mm6 \n\t"
|
||||
"psrlq $8, %%mm7 \n\t"
|
||||
"pand %2, %%mm0 \n\t"
|
||||
"pand %2, %%mm1 \n\t"
|
||||
"pand %2, %%mm4 \n\t"
|
||||
"pand %2, %%mm5 \n\t"
|
||||
"pand %3, %%mm2 \n\t"
|
||||
"pand %3, %%mm3 \n\t"
|
||||
"pand %3, %%mm6 \n\t"
|
||||
"pand %3, %%mm7 \n\t"
|
||||
"por %%mm2, %%mm0 \n\t"
|
||||
"por %%mm3, %%mm1 \n\t"
|
||||
"por %%mm6, %%mm4 \n\t"
|
||||
"por %%mm7, %%mm5 \n\t"
|
||||
|
||||
"movq %%mm1, %%mm2 \n\t"
|
||||
"movq %%mm4, %%mm3 \n\t"
|
||||
"psllq $48, %%mm2 \n\t"
|
||||
"psllq $32, %%mm3 \n\t"
|
||||
"pand %4, %%mm2 \n\t"
|
||||
"pand %5, %%mm3 \n\t"
|
||||
"por %%mm2, %%mm0 \n\t"
|
||||
"psrlq $16, %%mm1 \n\t"
|
||||
"psrlq $32, %%mm4 \n\t"
|
||||
"psllq $16, %%mm5 \n\t"
|
||||
"por %%mm3, %%mm1 \n\t"
|
||||
"pand %6, %%mm5 \n\t"
|
||||
"por %%mm5, %%mm4 \n\t"
|
||||
|
||||
MOVNTQ" %%mm0, %0 \n\t"
|
||||
MOVNTQ" %%mm1, 8%0 \n\t"
|
||||
MOVNTQ" %%mm4, 16%0"
|
||||
STORE_BGR24_MMX
|
||||
:"=m"(*dest)
|
||||
:"m"(*s),"m"(mask24l),
|
||||
"m"(mask24h),"m"(mask24hh),"m"(mask24hhh),"m"(mask24hhhh)
|
||||
:"m"(*s)
|
||||
:"memory");
|
||||
dest += 24;
|
||||
s += 32;
|
||||
|
@ -971,43 +974,10 @@ static inline void RENAME(rgb15tobgr24)(const uint8_t *src, uint8_t *dst, long s
|
|||
"movq %%mm0, %%mm2 \n\t"
|
||||
"movq %%mm1, %%mm3 \n\t"
|
||||
|
||||
"psrlq $8, %%mm2 \n\t"
|
||||
"psrlq $8, %%mm3 \n\t"
|
||||
"psrlq $8, %%mm6 \n\t"
|
||||
"psrlq $8, %%mm7 \n\t"
|
||||
"pand %2, %%mm0 \n\t"
|
||||
"pand %2, %%mm1 \n\t"
|
||||
"pand %2, %%mm4 \n\t"
|
||||
"pand %2, %%mm5 \n\t"
|
||||
"pand %3, %%mm2 \n\t"
|
||||
"pand %3, %%mm3 \n\t"
|
||||
"pand %3, %%mm6 \n\t"
|
||||
"pand %3, %%mm7 \n\t"
|
||||
"por %%mm2, %%mm0 \n\t"
|
||||
"por %%mm3, %%mm1 \n\t"
|
||||
"por %%mm6, %%mm4 \n\t"
|
||||
"por %%mm7, %%mm5 \n\t"
|
||||
|
||||
"movq %%mm1, %%mm2 \n\t"
|
||||
"movq %%mm4, %%mm3 \n\t"
|
||||
"psllq $48, %%mm2 \n\t"
|
||||
"psllq $32, %%mm3 \n\t"
|
||||
"pand %4, %%mm2 \n\t"
|
||||
"pand %5, %%mm3 \n\t"
|
||||
"por %%mm2, %%mm0 \n\t"
|
||||
"psrlq $16, %%mm1 \n\t"
|
||||
"psrlq $32, %%mm4 \n\t"
|
||||
"psllq $16, %%mm5 \n\t"
|
||||
"por %%mm3, %%mm1 \n\t"
|
||||
"pand %6, %%mm5 \n\t"
|
||||
"por %%mm5, %%mm4 \n\t"
|
||||
|
||||
MOVNTQ" %%mm0, %0 \n\t"
|
||||
MOVNTQ" %%mm1, 8%0 \n\t"
|
||||
MOVNTQ" %%mm4, 16%0"
|
||||
STORE_BGR24_MMX
|
||||
|
||||
:"=m"(*d)
|
||||
:"m"(*s),"m"(mask24l),"m"(mask24h),"m"(mask24hh),"m"(mask24hhh),"m"(mask24hhhh)
|
||||
:"m"(*s)
|
||||
:"memory");
|
||||
d += 24;
|
||||
s += 8;
|
||||
|
@ -1110,43 +1080,10 @@ static inline void RENAME(rgb16tobgr24)(const uint8_t *src, uint8_t *dst, long s
|
|||
"movq %%mm0, %%mm2 \n\t"
|
||||
"movq %%mm1, %%mm3 \n\t"
|
||||
|
||||
"psrlq $8, %%mm2 \n\t"
|
||||
"psrlq $8, %%mm3 \n\t"
|
||||
"psrlq $8, %%mm6 \n\t"
|
||||
"psrlq $8, %%mm7 \n\t"
|
||||
"pand %2, %%mm0 \n\t"
|
||||
"pand %2, %%mm1 \n\t"
|
||||
"pand %2, %%mm4 \n\t"
|
||||
"pand %2, %%mm5 \n\t"
|
||||
"pand %3, %%mm2 \n\t"
|
||||
"pand %3, %%mm3 \n\t"
|
||||
"pand %3, %%mm6 \n\t"
|
||||
"pand %3, %%mm7 \n\t"
|
||||
"por %%mm2, %%mm0 \n\t"
|
||||
"por %%mm3, %%mm1 \n\t"
|
||||
"por %%mm6, %%mm4 \n\t"
|
||||
"por %%mm7, %%mm5 \n\t"
|
||||
|
||||
"movq %%mm1, %%mm2 \n\t"
|
||||
"movq %%mm4, %%mm3 \n\t"
|
||||
"psllq $48, %%mm2 \n\t"
|
||||
"psllq $32, %%mm3 \n\t"
|
||||
"pand %4, %%mm2 \n\t"
|
||||
"pand %5, %%mm3 \n\t"
|
||||
"por %%mm2, %%mm0 \n\t"
|
||||
"psrlq $16, %%mm1 \n\t"
|
||||
"psrlq $32, %%mm4 \n\t"
|
||||
"psllq $16, %%mm5 \n\t"
|
||||
"por %%mm3, %%mm1 \n\t"
|
||||
"pand %6, %%mm5 \n\t"
|
||||
"por %%mm5, %%mm4 \n\t"
|
||||
|
||||
MOVNTQ" %%mm0, %0 \n\t"
|
||||
MOVNTQ" %%mm1, 8%0 \n\t"
|
||||
MOVNTQ" %%mm4, 16%0"
|
||||
STORE_BGR24_MMX
|
||||
|
||||
:"=m"(*d)
|
||||
:"m"(*s),"m"(mask24l),"m"(mask24h),"m"(mask24hh),"m"(mask24hhh),"m"(mask24hhhh)
|
||||
:"m"(*s)
|
||||
:"memory");
|
||||
d += 24;
|
||||
s += 8;
|
||||
|
|
Loading…
Add table
Reference in a new issue