aboutsummaryrefslogtreecommitdiff
path: root/pixman/pixman/pixman-sse2.c
diff options
context:
space:
mode:
Diffstat (limited to 'pixman/pixman/pixman-sse2.c')
-rw-r--r--pixman/pixman/pixman-sse2.c146
1 files changed, 49 insertions, 97 deletions
diff --git a/pixman/pixman/pixman-sse2.c b/pixman/pixman/pixman-sse2.c
index 665eeadbe..e273a951e 100644
--- a/pixman/pixman/pixman-sse2.c
+++ b/pixman/pixman/pixman-sse2.c
@@ -3309,18 +3309,22 @@ sse2_composite_over_n_8_8888 (pixman_implementation_t *imp,
}
+#if defined(__GNUC__) && !defined(__x86_64__) && !defined(__amd64__)
+__attribute__((__force_align_arg_pointer__))
+#endif
static pixman_bool_t
-pixman_fill_sse2 (uint32_t *bits,
- int stride,
- int bpp,
- int x,
- int y,
- int width,
- int height,
- uint32_t data)
+sse2_fill (pixman_implementation_t *imp,
+ uint32_t * bits,
+ int stride,
+ int bpp,
+ int x,
+ int y,
+ int width,
+ int height,
+ uint32_t xor)
{
uint32_t byte_width;
- uint8_t *byte_line;
+ uint8_t *byte_line;
__m128i xmm_def;
@@ -3334,9 +3338,9 @@ pixman_fill_sse2 (uint32_t *bits,
byte_width = width;
stride *= 1;
- b = data & 0xff;
+ b = xor & 0xff;
w = (b << 8) | b;
- data = (w << 16) | w;
+ xor = (w << 16) | w;
}
else if (bpp == 16)
{
@@ -3345,7 +3349,7 @@ pixman_fill_sse2 (uint32_t *bits,
byte_width = 2 * width;
stride *= 2;
- data = (data & 0xffff) * 0x00010001;
+ xor = (xor & 0xffff) * 0x00010001;
}
else if (bpp == 32)
{
@@ -3359,7 +3363,7 @@ pixman_fill_sse2 (uint32_t *bits,
return FALSE;
}
- xmm_def = create_mask_2x32_128 (data, data);
+ xmm_def = create_mask_2x32_128 (xor, xor);
while (height--)
{
@@ -3370,21 +3374,21 @@ pixman_fill_sse2 (uint32_t *bits,
if (w >= 1 && ((unsigned long)d & 1))
{
- *(uint8_t *)d = data;
+ *(uint8_t *)d = xor;
w -= 1;
d += 1;
}
while (w >= 2 && ((unsigned long)d & 3))
{
- *(uint16_t *)d = data;
+ *(uint16_t *)d = xor;
w -= 2;
d += 2;
}
while (w >= 4 && ((unsigned long)d & 15))
{
- *(uint32_t *)d = data;
+ *(uint32_t *)d = xor;
w -= 4;
d += 4;
@@ -3435,7 +3439,7 @@ pixman_fill_sse2 (uint32_t *bits,
while (w >= 4)
{
- *(uint32_t *)d = data;
+ *(uint32_t *)d = xor;
w -= 4;
d += 4;
@@ -3443,14 +3447,14 @@ pixman_fill_sse2 (uint32_t *bits,
if (w >= 2)
{
- *(uint16_t *)d = data;
+ *(uint16_t *)d = xor;
w -= 2;
d += 2;
}
if (w >= 1)
{
- *(uint8_t *)d = data;
+ *(uint8_t *)d = xor;
w -= 1;
d += 1;
}
@@ -3479,9 +3483,9 @@ sse2_composite_src_n_8_8888 (pixman_implementation_t *imp,
srca = src >> 24;
if (src == 0)
{
- pixman_fill_sse2 (dest_image->bits.bits, dest_image->bits.rowstride,
- PIXMAN_FORMAT_BPP (dest_image->bits.format),
- dest_x, dest_y, width, height, 0);
+ sse2_fill (imp, dest_image->bits.bits, dest_image->bits.rowstride,
+ PIXMAN_FORMAT_BPP (dest_image->bits.format),
+ dest_x, dest_y, width, height, 0);
return;
}
@@ -4523,18 +4527,19 @@ sse2_composite_add_8888_8888 (pixman_implementation_t *imp,
}
static pixman_bool_t
-pixman_blt_sse2 (uint32_t *src_bits,
- uint32_t *dst_bits,
- int src_stride,
- int dst_stride,
- int src_bpp,
- int dst_bpp,
- int src_x,
- int src_y,
- int dest_x,
- int dest_y,
- int width,
- int height)
+sse2_blt (pixman_implementation_t *imp,
+ uint32_t * src_bits,
+ uint32_t * dst_bits,
+ int src_stride,
+ int dst_stride,
+ int src_bpp,
+ int dst_bpp,
+ int src_x,
+ int src_y,
+ int dest_x,
+ int dest_y,
+ int width,
+ int height)
{
uint8_t * src_bytes;
uint8_t * dst_bytes;
@@ -4640,7 +4645,6 @@ pixman_blt_sse2 (uint32_t *src_bits,
}
}
-
return TRUE;
}
@@ -4649,13 +4653,13 @@ sse2_composite_copy_area (pixman_implementation_t *imp,
pixman_composite_info_t *info)
{
PIXMAN_COMPOSITE_ARGS (info);
- pixman_blt_sse2 (src_image->bits.bits,
- dest_image->bits.bits,
- src_image->bits.rowstride,
- dest_image->bits.rowstride,
- PIXMAN_FORMAT_BPP (src_image->bits.format),
- PIXMAN_FORMAT_BPP (dest_image->bits.format),
- src_x, src_y, dest_x, dest_y, width, height);
+ sse2_blt (imp, src_image->bits.bits,
+ dest_image->bits.bits,
+ src_image->bits.rowstride,
+ dest_image->bits.rowstride,
+ PIXMAN_FORMAT_BPP (src_image->bits.format),
+ PIXMAN_FORMAT_BPP (dest_image->bits.format),
+ src_x, src_y, dest_x, dest_y, width, height);
}
static void
@@ -5878,58 +5882,6 @@ static const pixman_fast_path_t sse2_fast_paths[] =
{ PIXMAN_OP_NONE },
};
-static pixman_bool_t
-sse2_blt (pixman_implementation_t *imp,
- uint32_t * src_bits,
- uint32_t * dst_bits,
- int src_stride,
- int dst_stride,
- int src_bpp,
- int dst_bpp,
- int src_x,
- int src_y,
- int dest_x,
- int dest_y,
- int width,
- int height)
-{
- if (!pixman_blt_sse2 (
- src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
- src_x, src_y, dest_x, dest_y, width, height))
-
- {
- return _pixman_implementation_blt (
- imp->delegate,
- src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
- src_x, src_y, dest_x, dest_y, width, height);
- }
-
- return TRUE;
-}
-
-#if defined(__GNUC__) && !defined(__x86_64__) && !defined(__amd64__)
-__attribute__((__force_align_arg_pointer__))
-#endif
-static pixman_bool_t
-sse2_fill (pixman_implementation_t *imp,
- uint32_t * bits,
- int stride,
- int bpp,
- int x,
- int y,
- int width,
- int height,
- uint32_t xor)
-{
- if (!pixman_fill_sse2 (bits, stride, bpp, x, y, width, height, xor))
- {
- return _pixman_implementation_fill (
- imp->delegate, bits, stride, bpp, x, y, width, height, xor);
- }
-
- return TRUE;
-}
-
static uint32_t *
sse2_fetch_x8r8g8b8 (pixman_iter_t *iter, const uint32_t *mask)
{
@@ -6072,7 +6024,7 @@ static const fetcher_info_t fetchers[] =
{ PIXMAN_null }
};
-static void
+static pixman_bool_t
sse2_src_iter_init (pixman_implementation_t *imp, pixman_iter_t *iter)
{
pixman_image_t *image = iter->image;
@@ -6097,12 +6049,12 @@ sse2_src_iter_init (pixman_implementation_t *imp, pixman_iter_t *iter)
iter->stride = s;
iter->get_scanline = f->get_scanline;
- return;
+ return TRUE;
}
}
}
- imp->delegate->src_iter_init (imp->delegate, iter);
+ return FALSE;
}
#if defined(__GNUC__) && !defined(__x86_64__) && !defined(__amd64__)