#ifdef USE_MMX
#include <mmintrin.h>
+#include "pixman-private.h"
#include "pixman-mmx.h"
}
static FASTCALL void
-mmxCombineOverU (uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
+mmxCombineOverU (pixman_implementation_t *imp, pixman_op_t op,
+ uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
{
const uint32_t *end = dest + width;
}
static FASTCALL void
-mmxCombineOverReverseU (uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
+mmxCombineOverReverseU (pixman_implementation_t *imp, pixman_op_t op,
+ uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
{
const uint32_t *end = dest + width;
}
static FASTCALL void
-mmxCombineInU (uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
+mmxCombineInU (pixman_implementation_t *imp, pixman_op_t op,
+ uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
{
const uint32_t *end = dest + width;
}
static FASTCALL void
-mmxCombineInReverseU (uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
+mmxCombineInReverseU (pixman_implementation_t *imp, pixman_op_t op,
+ uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
{
const uint32_t *end = dest + width;
}
static FASTCALL void
-mmxCombineOutU (uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
+mmxCombineOutU (pixman_implementation_t *imp, pixman_op_t op,
+ uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
{
const uint32_t *end = dest + width;
}
static FASTCALL void
-mmxCombineOutReverseU (uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
+mmxCombineOutReverseU (pixman_implementation_t *imp, pixman_op_t op,
+ uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
{
const uint32_t *end = dest + width;
}
static FASTCALL void
-mmxCombineAtopU (uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
+mmxCombineAtopU (pixman_implementation_t *imp, pixman_op_t op,
+ uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
{
const uint32_t *end = dest + width;
}
static FASTCALL void
-mmxCombineAtopReverseU (uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
+mmxCombineAtopReverseU (pixman_implementation_t *imp, pixman_op_t op,
+ uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
{
const uint32_t *end;
}
static FASTCALL void
-mmxCombineXorU (uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
+mmxCombineXorU (pixman_implementation_t *imp, pixman_op_t op,
+ uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
{
const uint32_t *end = dest + width;
}
static FASTCALL void
-mmxCombineAddU (uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
+mmxCombineAddU (pixman_implementation_t *imp, pixman_op_t op,
+ uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
{
const uint32_t *end = dest + width;
while (dest < end) {
}
static FASTCALL void
-mmxCombineSaturateU (uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
+mmxCombineSaturateU (pixman_implementation_t *imp, pixman_op_t op,
+ uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
{
const uint32_t *end = dest + width;
while (dest < end) {
static FASTCALL void
-mmxCombineSrcC (uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
+mmxCombineSrcC (pixman_implementation_t *imp, pixman_op_t op,
+ uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
{
const uint32_t *end = src + width;
while (src < end) {
}
static FASTCALL void
-mmxCombineOverC (uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
+mmxCombineOverC (pixman_implementation_t *imp, pixman_op_t op,
+ uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
{
const uint32_t *end = src + width;
while (src < end) {
}
static FASTCALL void
-mmxCombineOverReverseC (uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
+mmxCombineOverReverseC (pixman_implementation_t *imp, pixman_op_t op,
+ uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
{
const uint32_t *end = src + width;
while (src < end) {
static FASTCALL void
-mmxCombineInC (uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
+mmxCombineInC (pixman_implementation_t *imp, pixman_op_t op,
+ uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
{
const uint32_t *end = src + width;
while (src < end) {
}
static FASTCALL void
-mmxCombineInReverseC (uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
+mmxCombineInReverseC (pixman_implementation_t *imp, pixman_op_t op,
+ uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
{
const uint32_t *end = src + width;
while (src < end) {
}
static FASTCALL void
-mmxCombineOutC (uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
+mmxCombineOutC (pixman_implementation_t *imp, pixman_op_t op,
+ uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
{
const uint32_t *end = src + width;
while (src < end) {
}
static FASTCALL void
-mmxCombineOutReverseC (uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
+mmxCombineOutReverseC (pixman_implementation_t *imp, pixman_op_t op,
+ uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
{
const uint32_t *end = src + width;
while (src < end) {
}
static FASTCALL void
-mmxCombineAtopC (uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
+mmxCombineAtopC (pixman_implementation_t *imp, pixman_op_t op,
+ uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
{
const uint32_t *end = src + width;
while (src < end) {
}
static FASTCALL void
-mmxCombineAtopReverseC (uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
+mmxCombineAtopReverseC (pixman_implementation_t *imp, pixman_op_t op,
+ uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
{
const uint32_t *end = src + width;
while (src < end) {
}
static FASTCALL void
-mmxCombineXorC (uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
+mmxCombineXorC (pixman_implementation_t *imp, pixman_op_t op,
+ uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
{
const uint32_t *end = src + width;
while (src < end) {
}
static FASTCALL void
-mmxCombineAddC (uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
+mmxCombineAddC (pixman_implementation_t *imp, pixman_op_t op,
+ uint32_t *dest, const uint32_t *src, const uint32_t *mask, int width)
{
const uint32_t *end = src + width;
while (src < end) {
/* check if we have MMX support and initialize accordingly */
if (pixman_have_mmx())
{
+#if 0
pixman_composeFunctions.combineU[PIXMAN_OP_OVER] = mmxCombineOverU;
pixman_composeFunctions.combineU[PIXMAN_OP_OVER_REVERSE] = mmxCombineOverReverseU;
pixman_composeFunctions.combineU[PIXMAN_OP_IN] = mmxCombineInU;
pixman_composeFunctions.combineC[PIXMAN_OP_ATOP_REVERSE] = mmxCombineAtopReverseC;
pixman_composeFunctions.combineC[PIXMAN_OP_XOR] = mmxCombineXorC;
pixman_composeFunctions.combineC[PIXMAN_OP_ADD] = mmxCombineAddC;
+#endif
}
initialized = TRUE;
};
const FastPathInfo *const mmx_fast_paths = mmx_fast_path_array;
+pixman_implementation_t *
+_pixman_implementation_create_mmx (pixman_implementation_t *toplevel)
+{
+ pixman_implementation_t *general = _pixman_implementation_create_general (NULL);
+ pixman_implementation_t *imp = _pixman_implementation_create (toplevel, general);
+
+ /* check if we have MMX support and initialize accordingly */
+ if (pixman_have_mmx())
+ {
+ imp->combine_32[PIXMAN_OP_OVER] = mmxCombineOverU;
+ imp->combine_32[PIXMAN_OP_OVER_REVERSE] = mmxCombineOverReverseU;
+ imp->combine_32[PIXMAN_OP_IN] = mmxCombineInU;
+ imp->combine_32[PIXMAN_OP_IN_REVERSE] = mmxCombineInReverseU;
+ imp->combine_32[PIXMAN_OP_OUT] = mmxCombineOutU;
+ imp->combine_32[PIXMAN_OP_OUT_REVERSE] = mmxCombineOutReverseU;
+ imp->combine_32[PIXMAN_OP_ATOP] = mmxCombineAtopU;
+ imp->combine_32[PIXMAN_OP_ATOP_REVERSE] = mmxCombineAtopReverseU;
+ imp->combine_32[PIXMAN_OP_XOR] = mmxCombineXorU;
+ imp->combine_32[PIXMAN_OP_ADD] = mmxCombineAddU;
+ imp->combine_32[PIXMAN_OP_SATURATE] = mmxCombineSaturateU;
+
+ imp->combine_32_ca[PIXMAN_OP_SRC] = mmxCombineSrcC;
+ imp->combine_32_ca[PIXMAN_OP_OVER] = mmxCombineOverC;
+ imp->combine_32_ca[PIXMAN_OP_OVER_REVERSE] = mmxCombineOverReverseC;
+ imp->combine_32_ca[PIXMAN_OP_IN] = mmxCombineInC;
+ imp->combine_32_ca[PIXMAN_OP_IN_REVERSE] = mmxCombineInReverseC;
+ imp->combine_32_ca[PIXMAN_OP_OUT] = mmxCombineOutC;
+ imp->combine_32_ca[PIXMAN_OP_OUT_REVERSE] = mmxCombineOutReverseC;
+ imp->combine_32_ca[PIXMAN_OP_ATOP] = mmxCombineAtopC;
+ imp->combine_32_ca[PIXMAN_OP_ATOP_REVERSE] = mmxCombineAtopReverseC;
+ imp->combine_32_ca[PIXMAN_OP_XOR] = mmxCombineXorC;
+ imp->combine_32_ca[PIXMAN_OP_ADD] = mmxCombineAddC;
+ }
+
+ return imp;
+}
+
#endif /* USE_MMX */