app: slight optimization of sse2 for src_atop

This commit is contained in:
Øyvind Kolås
2017-01-25 20:24:50 +01:00
parent e1c1a5a9a8
commit 09af8dbca5

View File

@ -572,13 +572,12 @@ compfun_src_atop_sse2 (gfloat *in,
while (samples--) while (samples--)
{ {
__v4sf alpha, rgba_in, rgba_layer, out_alpha; __v4sf alpha, rgba_in, rgba_layer;
rgba_in = *v_in ++; rgba_in = *v_in ++;
rgba_layer = *v_layer++; rgba_layer = *v_layer++;
alpha = (__v4sf)_mm_shuffle_epi32((__m128i)rgba_layer,_MM_SHUFFLE(3,3,3,3)) * v_opacity; alpha = (__v4sf)_mm_shuffle_epi32((__m128i)rgba_layer,_MM_SHUFFLE(3,3,3,3)) * v_opacity;
out_alpha = (__v4sf)_mm_shuffle_epi32((__m128i)rgba_in,_MM_SHUFFLE(3,3,3,3));
if (mask) if (mask)
{ {
@ -587,8 +586,9 @@ compfun_src_atop_sse2 (gfloat *in,
if (_mm_ucomigt_ss (alpha, _mm_setzero_ps ())) if (_mm_ucomigt_ss (alpha, _mm_setzero_ps ()))
{ {
__v4sf out_pixel, out_pixel_rbaa; __v4sf out_pixel, out_pixel_rbaa, out_alpha;
out_alpha = (__v4sf)_mm_shuffle_epi32((__m128i)rgba_in,_MM_SHUFFLE(3,3,3,3));
out_pixel = rgba_layer * alpha + rgba_in * (v_one - alpha); out_pixel = rgba_layer * alpha + rgba_in * (v_one - alpha);
out_pixel_rbaa = _mm_shuffle_ps (out_pixel, out_alpha, _MM_SHUFFLE (3, 3, 2, 0)); out_pixel_rbaa = _mm_shuffle_ps (out_pixel, out_alpha, _MM_SHUFFLE (3, 3, 2, 0));
out_pixel = _mm_shuffle_ps (out_pixel, out_pixel_rbaa, _MM_SHUFFLE (2, 1, 1, 0)); out_pixel = _mm_shuffle_ps (out_pixel, out_pixel_rbaa, _MM_SHUFFLE (2, 1, 1, 0));