swscale/x86/rgb2rgb_template: Fallback to mmx in interleaveBytes() if the alignment is insufficient for SSE*

This also as a sideeffect fixes the non aligned case

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
Michael Niedermayer 2015-12-15 02:50:20 +01:00
parent 80bfce35cc
commit a066ff89bc
1 changed files with 6 additions and 8 deletions

View File

@ -1887,10 +1887,9 @@ static void RENAME(interleaveBytes)(const uint8_t *src1, const uint8_t *src2, ui
for (h=0; h < height; h++) { for (h=0; h < height; h++) {
int w; int w;
if (width >= 16 if (width >= 16) {
#if COMPILE_TEMPLATE_SSE2 #if COMPILE_TEMPLATE_SSE2
&& !((((intptr_t)src1) | ((intptr_t)src2) | ((intptr_t)dest))&15) if (!((((intptr_t)src1) | ((intptr_t)src2) | ((intptr_t)dest))&15)) {
)
__asm__( __asm__(
"xor %%"REG_a", %%"REG_a" \n\t" "xor %%"REG_a", %%"REG_a" \n\t"
"1: \n\t" "1: \n\t"
@ -1909,8 +1908,8 @@ static void RENAME(interleaveBytes)(const uint8_t *src1, const uint8_t *src2, ui
::"r"(dest), "r"(src1), "r"(src2), "r" ((x86_reg)width-15) ::"r"(dest), "r"(src1), "r"(src2), "r" ((x86_reg)width-15)
: "memory", XMM_CLOBBERS("xmm0", "xmm1", "xmm2",) "%"REG_a : "memory", XMM_CLOBBERS("xmm0", "xmm1", "xmm2",) "%"REG_a
); );
#else } else
) #endif
__asm__( __asm__(
"xor %%"REG_a", %%"REG_a" \n\t" "xor %%"REG_a", %%"REG_a" \n\t"
"1: \n\t" "1: \n\t"
@ -1936,7 +1935,8 @@ static void RENAME(interleaveBytes)(const uint8_t *src1, const uint8_t *src2, ui
::"r"(dest), "r"(src1), "r"(src2), "r" ((x86_reg)width-15) ::"r"(dest), "r"(src1), "r"(src2), "r" ((x86_reg)width-15)
: "memory", "%"REG_a : "memory", "%"REG_a
); );
#endif
}
for (w= (width&(~15)); w < width; w++) { for (w= (width&(~15)); w < width; w++) {
dest[2*w+0] = src1[w]; dest[2*w+0] = src1[w];
dest[2*w+1] = src2[w]; dest[2*w+1] = src2[w];
@ -1946,9 +1946,7 @@ static void RENAME(interleaveBytes)(const uint8_t *src1, const uint8_t *src2, ui
src2 += src2Stride; src2 += src2Stride;
} }
__asm__( __asm__(
#if !COMPILE_TEMPLATE_SSE2
EMMS" \n\t" EMMS" \n\t"
#endif
SFENCE" \n\t" SFENCE" \n\t"
::: "memory" ::: "memory"
); );