summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Turner <mattst88@gmail.com>2012-02-09 11:34:56 -0500
committerMatt Turner <mattst88@gmail.com>2012-02-09 11:34:56 -0500
commit3626b4231f57a3a68f93f07e40430722d50f9a6e (patch)
treeffbec4131d9afb8ee565455ffc3f69b5af4ce04a
parentRemove x11-base/xorg-server-9999 (diff)
downloadloongson-3626b4231f57a3a68f93f07e40430722d50f9a6e.tar.gz
loongson-3626b4231f57a3a68f93f07e40430722d50f9a6e.tar.bz2
loongson-3626b4231f57a3a68f93f07e40430722d50f9a6e.zip
Remove x11-libs/pixman
Patch no longer applies and pixman-9999 shouldn't be in the loongson overlay anyway. If you want pixman-9999 you should use the x11 overlay. Signed-off-by: Matt Turner <mattst88@gmail.com>
-rw-r--r--x11-libs/pixman/Manifest2
-rw-r--r--x11-libs/pixman/files/pixman-loongson2f.patch2745
-rw-r--r--x11-libs/pixman/pixman-9999.ebuild50
3 files changed, 0 insertions, 2797 deletions
diff --git a/x11-libs/pixman/Manifest b/x11-libs/pixman/Manifest
deleted file mode 100644
index 95605c7..0000000
--- a/x11-libs/pixman/Manifest
+++ /dev/null
@@ -1,2 +0,0 @@
-AUX pixman-loongson2f.patch 76952 RMD160 633c72e7c75d1c2cf32cfe28f8253b09a96ba2cc SHA1 ce4d69ea341f21fdc30f6d401ee479cd3571dab3 SHA256 48c8db615b44285f9123905798a8c17e00273def3f75aae5adfb4de2c3cf6134
-EBUILD pixman-9999.ebuild 1482 RMD160 7ffc7058020249dabf2d900893c59e090bfacd63 SHA1 961da2a0754d51e9ab8acc48ef6a2b8d281dddcd SHA256 5f88192d2ba405fb01c0e860bde53e1f6ecb751542c845ad6e4e1d60a301a00a
diff --git a/x11-libs/pixman/files/pixman-loongson2f.patch b/x11-libs/pixman/files/pixman-loongson2f.patch
deleted file mode 100644
index 15e01cb..0000000
--- a/x11-libs/pixman/files/pixman-loongson2f.patch
+++ /dev/null
@@ -1,2745 +0,0 @@
-diff -urN pixman//configure.ac Pixman.Loongson//configure.ac
---- pixman//configure.ac 2010-12-25 18:46:00.018699000 +0800
-+++ Pixman.Loongson//configure.ac 2010-12-25 18:39:15.298778000 +0800
-@@ -264,6 +264,43 @@
- ])
-
- dnl ===========================================================================
-+dnl Check for Loongson SIMD
-+
-+have_loongson_intrinsics=no
-+AC_MSG_CHECKING(whether to use Loongson SIMD intrinsics)
-+
-+AC_COMPILE_IFELSE([
-+#if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 4))
-+error "Need GCC >= 4.4 for Loongson SIMD compilation"
-+#endif
-+int main () {
-+ /* Test with a loongson SIMD instruction. */
-+ asm volatile ( ".set arch = loongson2f \n\t" "and \$f0, \$f0, \$f0 \n\t" : : : "cc", "memory" );
-+ return 0;
-+}], have_loongson_intrinsics=yes)
-+
-+
-+AC_ARG_ENABLE(loongson,
-+ [AC_HELP_STRING([--disable-loongson],
-+ [disable Loongson fast paths])],
-+ [enable_loongson=$enableval], [enable_loongson=auto])
-+
-+if test $enable_loongson = no ; then
-+ have_loongson_intrinsics=disabled
-+fi
-+
-+if test $have_loongson_intrinsics = yes ; then
-+ AC_DEFINE(USE_LS, 1, [use Loongson compiler intrinsics])
-+fi
-+
-+AC_MSG_RESULT($have_loongson_intrinsics)
-+if test $enable_loongson = yes && test $have_loongson_intrinsics = no ; then
-+ AC_MSG_ERROR([Loongson intrinsics not detected])
-+fi
-+
-+AM_CONDITIONAL(USE_LS, test $have_loongson_intrinsics = yes)
-+
-+dnl ===========================================================================
- dnl Check for MMX
-
- if test "x$MMX_CFLAGS" = "x" ; then
-diff -urN pixman//pixman/Makefile.am Pixman.Loongson//pixman/Makefile.am
---- pixman//pixman/Makefile.am 2010-12-25 18:46:00.025027000 +0800
-+++ Pixman.Loongson//pixman/Makefile.am 2010-12-25 18:39:15.303599000 +0800
-@@ -55,6 +55,19 @@
- pixman-combine.h.template solaris-hwcap.mapfile pixman-x64-mmx-emulation.h
- CLEANFILES = pixman-combine32.c pixman-combine64.c pixman-combine32.h pixman-combine64.h
-
-+# loongson code
-+if USE_LS
-+noinst_LTLIBRARIES += libpixman-ls.la
-+libpixman_ls_la_SOURCES = \
-+ pixman-ls.c
-+libpixman_ls_la_CFLAGS = $(DEP_CFLAGS) $(LS_CFLAGS)
-+libpixman_ls_la_LIBADD = $(DEP_LIBS)
-+libpixman_1_la_LDFLAGS += $(LS_LDFLAGS)
-+libpixman_1_la_LIBADD += libpixman-ls.la
-+
-+ASM_CFLAGS_ls=$(LS_CFLAGS)
-+endif
-+
- # mmx code
- if USE_MMX
- noinst_LTLIBRARIES += libpixman-mmx.la
-diff -urN pixman//pixman/pixman-combine-ls.c Pixman.Loongson//pixman/pixman-combine-ls.c
---- pixman//pixman/pixman-combine-ls.c 1970-01-01 08:00:00.000000000 +0800
-+++ Pixman.Loongson//pixman/pixman-combine-ls.c 2010-12-25 18:39:15.344171000 +0800
-@@ -0,0 +1,911 @@
-+static force_inline uint32_t
-+combine (const uint32_t *src, const uint32_t *mask)
-+{
-+ uint32_t ssrc = *src;
-+
-+ if (mask)
-+ {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%1,$f22)
-+ load8888r(%0,$f20)
-+ expand_alpha($f22,$f22)
-+ pix_multiply($f20,$f22)
-+ store8888r($f8,%0)
-+ :"+r"(ssrc):"r"(*mask):clobber
-+ );
-+ }
-+ return ssrc;
-+}
-+
-+static void
-+ls_combine_saturate_u (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)
-+ {
-+ uint32_t s = combine (src, mask);
-+ uint32_t d = *dest;
-+
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%1,$f22)
-+ load8888r(%0,$f20)
-+ :"+r"(d):"r"(s):clobber
-+ );
-+
-+ uint32_t sa = s >> 24;
-+ uint32_t da = ~d >> 24;
-+
-+ if (sa > da)
-+ {
-+ uint32_t dds = DIV_UN8 (da, sa) << 24;
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%0,$f24)
-+ expand_alpha($f24,$f24)
-+ pix_multiply($f22,$f24)
-+ save_to($f22)
-+ ::"r"(dds):clobber
-+ );
-+ }
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ pix_add($f20,$f22)
-+ store8888r($f8,%0)
-+ :"=r"(*dest)::clobber
-+ );
-+
-+ ++src;
-+ ++dest;
-+ if (mask)
-+ mask++;
-+ }
-+}
-+static void
-+ls_combine_out_u (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)
-+ {
-+ if (mask)
-+ {
-+
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+
-+ load8888r(%2,$f22)
-+ load8888r(%1,$f20)
-+ expand_alpha($f22,$f22)
-+ pix_multiply($f20,$f22)
-+ save_to ($f20)
-+
-+ load8888r(%0,$f24)
-+ expand_alpha($f24,$f24)
-+ negate($f24,$f24)
-+ pix_multiply($f20,$f24)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(*src),"r"(*mask):clobber
-+ );
-+
-+ mask++;
-+ }else {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+
-+
-+ load8888r(%1,$f20)
-+
-+ load8888r(%0,$f24)
-+ expand_alpha($f24,$f24)
-+ negate($f24,$f24)
-+ pix_multiply($f20,$f24)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(*src):clobber
-+ );
-+
-+ }
-+ ++dest;
-+ ++src;
-+ }
-+}
-+
-+static void
-+ls_combine_out_reverse_u (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)
-+ {
-+ if (mask)
-+ {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+
-+ load8888r(%2,$f22)
-+ load8888r(%1,$f20)
-+ expand_alpha($f22,$f22)
-+ pix_multiply($f20,$f22)
-+ save_to ($f20)
-+
-+ load8888r(%0,$f24)
-+ expand_alpha($f20,$f20)
-+ negate($f20,$f20)
-+ pix_multiply($f20,$f24)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(*src),"r"(*mask):clobber
-+ );
-+
-+ mask++;
-+ }else{
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+
-+ load8888r(%1,$f20)
-+
-+ load8888r(%0,$f24)
-+ expand_alpha($f20,$f20)
-+ negate($f20,$f20)
-+ pix_multiply($f20,$f24)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(*src):clobber
-+ );
-+ }
-+ ++dest;
-+ ++src;
-+
-+ }
-+}
-+
-+static void
-+ls_combine_out_ca (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)
-+ {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%2,$f22)
-+ load8888r(%1,$f20)
-+ load8888r(%0,$f24)
-+ expand_alpha($f24,$f26)
-+ negate($f26,$f26)
-+ pix_multiply($f20,$f22)
-+ save_to($f20)
-+ pix_multiply($f20,$f26)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(*src),"r"(*mask):clobber
-+ );
-+ ++src;
-+ ++dest;
-+ ++mask;
-+ }
-+}
-+
-+static void
-+ls_combine_out_reverse_ca (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)
-+ {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%2,$f22)
-+ load8888r(%1,$f20)
-+ load8888r(%0,$f24)
-+ expand_alpha($f20,$f28)
-+ pix_multiply($f22,$f28)
-+ save_to($f22)
-+ negate($f22,$f22)
-+ pix_multiply($f24,$f22)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(*src),"r"(*mask):clobber
-+ );
-+ ++src;
-+ ++dest;
-+ ++mask;
-+ }
-+}
-+
-+
-+static void
-+ls_combine_atop_u (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)
-+ {
-+ if (mask)
-+ {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+
-+ load8888r(%2,$f22)
-+ load8888r(%1,$f20)
-+ expand_alpha($f22,$f22)
-+ pix_multiply($f20,$f22)
-+ save_to ($f20)
-+
-+ load8888r(%0,$f24)
-+ expand_alpha($f20,$f26)
-+ expand_alpha($f24,$f28)
-+ negate($f26,$f26)
-+ pix_add_mul($f20,$f28,$f24,$f26)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(*src),"r"(*mask):clobber
-+ );
-+
-+ mask++;
-+ }else {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%1,$f20)
-+
-+ load8888r(%0,$f24)
-+ expand_alpha($f20,$f26)
-+ expand_alpha($f24,$f28)
-+ negate($f26,$f26)
-+ pix_add_mul($f20,$f28,$f24,$f26)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(*src):clobber
-+ );
-+ }
-+ ++dest;
-+ ++src;
-+
-+ }
-+}
-+
-+static void
-+ls_combine_atop_reverse_u (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;
-+
-+ end = dest + width;
-+
-+ while (dest < end)
-+ {
-+ if (mask){
-+
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+
-+ load8888r(%2,$f22)
-+ load8888r(%1,$f20)
-+ expand_alpha($f22,$f22)
-+ pix_multiply($f20,$f22)
-+ save_to ($f20)
-+
-+ load8888r(%0,$f24)
-+ expand_alpha($f20,$f26)
-+ expand_alpha($f24,$f28)
-+ negate($f28,$f28)
-+ pix_add_mul($f20,$f28,$f24,$f26)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(*src),"r"(*mask):clobber
-+ );
-+ mask++;
-+ }else{
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+
-+ load8888r(%1,$f20)
-+
-+ load8888r(%0,$f24)
-+ expand_alpha($f20,$f26)
-+ expand_alpha($f24,$f28)
-+ negate($f28,$f28)
-+ pix_add_mul($f20,$f28,$f24,$f26)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(*src):clobber
-+ );
-+ }
-+ ++dest;
-+ ++src;
-+ }
-+}
-+
-+
-+static void
-+ls_combine_atop_ca (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)
-+ {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%2,$f22)
-+ load8888r(%1,$f20)
-+ load8888r(%0,$f24)
-+ expand_alpha($f24,$f26)
-+ expand_alpha($f20,$f28)
-+ pix_multiply($f20,$f22)
-+ save_to($f20)
-+ pix_multiply($f22,$f28)
-+ save_to($f22)
-+ negate($f22,$f22)
-+ pix_add_mul($f24,$f22,$f20,$f26)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(*src),"r"(*mask):clobber
-+ );
-+ ++src;
-+ ++dest;
-+ ++mask;
-+ }
-+}
-+
-+static void
-+ls_combine_atop_reverse_ca (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)
-+ {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%2,$f22)
-+ load8888r(%1,$f20)
-+ load8888r(%0,$f24)
-+ expand_alpha($f24,$f26)
-+ expand_alpha($f20,$f28)
-+ pix_multiply($f20,$f22)
-+ save_to($f20)
-+ pix_multiply($f22,$f28)
-+ save_to($f22)
-+ negate($f26,$f26)
-+ pix_add_mul($f24,$f22,$f20,$f26)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(*src),"r"(*mask):clobber
-+ );
-+ ++src;
-+ ++dest;
-+ ++mask;
-+ }
-+}
-+
-+static void
-+ls_combine_xor_u (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)
-+ {
-+ if (mask)
-+ {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%2,$f22)
-+ load8888r(%1,$f20)
-+ expand_alpha($f22,$f22)
-+ pix_multiply($f20,$f22)
-+ save_to ($f20)
-+
-+
-+ load8888r(%0,$f24)
-+ expand_alpha($f20,$f26)
-+ expand_alpha($f24,$f28)
-+ negate($f26,$f26)
-+ negate($f28,$f28)
-+ pix_add_mul($f20,$f28,$f24,$f26)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(*src),"r"(*mask):clobber
-+ );
-+ mask++;
-+ }else{
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%1,$f20)
-+
-+ load8888r(%0,$f24)
-+ expand_alpha($f20,$f26)
-+ expand_alpha($f24,$f28)
-+ negate($f26,$f26)
-+ negate($f28,$f28)
-+ pix_add_mul($f20,$f28,$f24,$f26)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(*src):clobber
-+ );
-+ }
-+ ++dest;
-+ ++src;
-+
-+ }
-+}
-+
-+static void
-+ls_combine_xor_ca (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)
-+ {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%2,$f22)
-+ load8888r(%1,$f20)
-+ load8888r(%0,$f24)
-+ expand_alpha($f24,$f26)
-+ expand_alpha($f20,$f28)
-+ pix_multiply($f20,$f22)
-+ save_to($f20)
-+ pix_multiply($f22,$f28)
-+ save_to($f22)
-+ negate($f26,$f26)
-+ negate($f22,$f22)
-+ pix_add_mul($f24,$f22,$f20,$f26)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(*src),"r"(*mask):clobber
-+ );
-+ ++src;
-+ ++dest;
-+ ++mask;
-+ }
-+}
-+
-+
-+static void
-+ls_combine_in_reverse_u (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)
-+ {
-+
-+ if (mask)
-+ {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%2,$f22)
-+ load8888r(%1,$f20)
-+ expand_alpha($f22,$f22)
-+ pix_multiply($f20,$f22)
-+ save_to ($f20)
-+
-+ load8888r(%0,$f24)
-+ expand_alpha($f20,$f26)
-+ pix_multiply($f24,$f26)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(*src),"r"(*mask):clobber
-+ );
-+ mask++;
-+ } else {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%1,$f20)
-+
-+ load8888r(%0,$f24)
-+ expand_alpha($f20,$f26)
-+ pix_multiply($f24,$f26)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(*src):clobber
-+ );
-+ }
-+ ++dest;
-+ ++src;
-+ }
-+}
-+
-+static void
-+ls_combine_in_reverse_ca (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)
-+ {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%2,$f22)
-+ load8888r(%1,$f20)
-+ load8888r(%0,$f24)
-+ expand_alpha($f20,$f20)
-+ pix_multiply($f22,$f20)
-+ save_to($f26)
-+ pix_multiply($f24,$f26)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(*src),"r"(*mask):clobber
-+ );
-+ ++src;
-+ ++dest;
-+ ++mask;
-+ }
-+}
-+
-+static void
-+ls_combine_in_u (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)
-+ {
-+ if (mask)
-+ {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%2,$f22)
-+ load8888r(%1,$f20)
-+ expand_alpha($f22,$f22)
-+ pix_multiply($f20,$f22)
-+ save_to ($f20)
-+
-+ load8888r(%0,$f24)
-+ expand_alpha($f24,$f24)
-+ pix_multiply($f20,$f24)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(*src),"r"(*mask):clobber
-+ );
-+ mask++;
-+ } else {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%1,$f20)
-+
-+ load8888r(%0,$f24)
-+ expand_alpha($f24,$f24)
-+ pix_multiply($f20,$f24)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(*src):clobber
-+ );
-+
-+ }
-+ ++dest;
-+ ++src;
-+ }
-+}
-+
-+static void
-+ls_combine_in_ca (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)
-+ {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%2,$f22)
-+ load8888r(%1,$f20)
-+ load8888r(%0,$f24)
-+ expand_alpha($f24,$f24)
-+ pix_multiply($f20,$f22)
-+ save_to($f26)
-+ pix_multiply($f26,$f24)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(*src),"r"(*mask):clobber
-+ );
-+ ++src;
-+ ++dest;
-+ ++mask;
-+ }
-+ }
-+static void
-+ls_combine_src_ca (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)
-+ {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%2,$f22)
-+ load8888r(%1,$f20)
-+ pix_multiply($f20,$f22)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(*src),"r"(*mask):clobber
-+ );
-+ ++src;
-+ ++mask;
-+ ++dest;
-+ }
-+
-+}
-+
-+
-+static void
-+ls_combine_over_u (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)
-+ {
-+
-+ uint32_t ssrc = combine (src, mask);
-+ uint32_t a = ssrc >> 24;
-+
-+ if (a == 0xff)
-+ {
-+ *dest = ssrc;
-+ }
-+ else if (ssrc)
-+ {
-+
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%1,$f20)
-+
-+ expand_alpha($f20,$f24)
-+ load8888r(%0,$f26)
-+ over($f20,$f24,$f26)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(ssrc):clobber
-+ );
-+ }
-+
-+ ++dest;
-+ ++src;
-+ if (mask)
-+ ++mask;
-+ }
-+}
-+
-+static void
-+ls_combine_over_reverse_u (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)
-+ {
-+ if (mask)
-+ {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+
-+ load8888r(%2,$f22)
-+ load8888r(%1,$f20)
-+ expand_alpha($f22,$f22)
-+ pix_multiply($f20,$f22)
-+ save_to ($f20)
-+
-+ load8888r(%0,$f26)
-+ expand_alpha($f26,$f28)
-+ over($f26,$f28,$f20)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(*src),"r"(*mask):clobber
-+ );
-+ mask++;
-+ }else{
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%1,$f20)
-+
-+ load8888r(%0,$f26)
-+ expand_alpha($f26,$f28)
-+ over($f26,$f28,$f20)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(*src):clobber
-+ );
-+
-+ }
-+ ++dest;
-+ ++src;
-+ }
-+}
-+
-+
-+static void
-+ls_combine_over_ca (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)
-+ {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%0,$f20)
-+ load8888r(%1,$f22)
-+ load8888r(%2,$f24)
-+ expand_alpha($f22,$f26)
-+ in_over($f22,$f26,$f24,$f20)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(*src),"r"(*mask):clobber
-+ );
-+ ++src;
-+ ++dest;
-+ ++mask;
-+ }
-+
-+}
-+
-+static void
-+ls_combine_over_reverse_ca (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)
-+ {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%0,$f20)
-+ load8888r(%1,$f22)
-+ load8888r(%2,$f24)
-+ in($f22,$f24)
-+ save_to($f22)
-+ expand_alpha($f20,$f28)
-+ over($f20,$f28,$f22)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(*src),"r"(*mask):clobber
-+ );
-+ ++src;
-+ ++dest;
-+ ++mask;
-+ }
-+
-+}
-+
-+static void
-+ls_combine_add_u (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)
-+ {
-+
-+ if (mask)
-+ {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%2,$f22)
-+ load8888r(%1,$f20)
-+ expand_alpha($f22,$f22)
-+ pix_multiply($f20,$f22)
-+ save_to ($f20)
-+
-+ load8888r(%0,$f22)
-+ pix_add($f20,$f22)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(*src),"r"(*mask):clobber
-+ );
-+ mask++;
-+ }else{
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%1,$f20)
-+
-+ load8888r(%0,$f22)
-+ pix_add($f20,$f22)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(*src):clobber
-+ );
-+
-+ }
-+ ++dest;
-+ ++src;
-+ }
-+}
-+
-+static void
-+ls_combine_add_ca (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)
-+ {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%0,$f20)
-+ load8888r(%1,$f22)
-+ load8888r(%2,$f24)
-+ pix_multiply($f22,$f24)
-+ save_to($f22)
-+ pix_add($f22,$f20)
-+ store8888r($f8,%0)
-+ :"+r"(*dest):"r"(*src),"r"(*mask):clobber
-+ );
-+ ++src;
-+ ++dest;
-+ ++mask;
-+ }
-+}
-diff -urN pixman//pixman/pixman-composite-ls.c Pixman.Loongson//pixman/pixman-composite-ls.c
---- pixman//pixman/pixman-composite-ls.c 1970-01-01 08:00:00.000000000 +0800
-+++ Pixman.Loongson//pixman/pixman-composite-ls.c 2010-12-25 18:39:15.356667000 +0800
-@@ -0,0 +1,967 @@
-+static void
-+ls_composite_over_x888_8_8888 (pixman_implementation_t *imp,
-+ pixman_op_t op,
-+ pixman_image_t * src_image,
-+ pixman_image_t * mask_image,
-+ pixman_image_t * dst_image,
-+ int32_t src_x,
-+ int32_t src_y,
-+ int32_t mask_x,
-+ int32_t mask_y,
-+ int32_t dest_x,
-+ int32_t dest_y,
-+ int32_t width,
-+ int32_t height)
-+{
-+
-+ uint32_t *src, *src_line;
-+ uint32_t *dst, *dst_line;
-+ uint8_t *mask, *mask_line;
-+ int src_stride, mask_stride, dst_stride;
-+ uint32_t m;
-+ uint32_t s, d;
-+ int32_t w;
-+
-+ PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, uint32_t, dst_stride, dst_line, 1);
-+ PIXMAN_IMAGE_GET_LINE (mask_image, mask_x, mask_y, uint8_t, mask_stride, mask_line, 1);
-+ PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, uint32_t, src_stride, src_line, 1);
-+
-+ while (height--)
-+ {
-+ src = src_line;
-+ src_line += src_stride;
-+ dst = dst_line;
-+ dst_line += dst_stride;
-+ mask = mask_line;
-+ mask_line += mask_stride;
-+
-+ w = width;
-+ while (w--)
-+ {
-+ m = *mask++;
-+ if (m)
-+ {
-+ s = *src | 0xff000000;
-+
-+ if (m == 0xff)
-+ {
-+ *dst = s;
-+ }
-+ else
-+ {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%0,$f20)
-+ load8888r(%1,$f22)
-+ load8888r(%2,$f24)
-+ expand_alpha($f22,$f26)
-+ expand_alpha_rev($f24,$f28)
-+ in_over($f22,$f26,$f28,$f20)
-+ store8888r($f8,%0)
-+ :"+r"(*dst):"r"(s),"r"(m):clobber
-+ );
-+
-+// __m64 sa = expand_alpha (s);
-+// __m64 vm = expand_alpha_rev (to_m64 (m));
-+// __m64 vdest = in_over (s, sa, vm, load8888 (*dst));
-+// *dst = store8888 (vdest);
-+
-+ }
-+ }
-+ src++;
-+ dst++;
-+ }
-+ }
-+}
-+
-+
-+
-+
-+
-+static void
-+ls_composite_over_8888_8888 (pixman_implementation_t *imp,
-+ pixman_op_t op,
-+ pixman_image_t * src_image,
-+ pixman_image_t * mask_image,
-+ pixman_image_t * dst_image,
-+ int32_t src_x,
-+ int32_t src_y,
-+ int32_t mask_x,
-+ int32_t mask_y,
-+ int32_t dest_x,
-+ int32_t dest_y,
-+ int32_t width,
-+ int32_t height)
-+{
-+ uint32_t *dst_line, *dst;
-+ uint32_t *src_line, *src;
-+ uint32_t s;
-+ int dst_stride, src_stride;
-+ uint8_t a;
-+ int32_t w;
-+
-+ PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, uint32_t, dst_stride, dst_line, 1);
-+ PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, uint32_t, src_stride, src_line, 1);
-+
-+ while (height--)
-+ {
-+ dst = dst_line;
-+ dst_line += dst_stride;
-+ src = src_line;
-+ src_line += src_stride;
-+ w = width;
-+
-+ while (w--)
-+ {
-+ s = *src;
-+ a = s >> 24;
-+
-+ if (a == 0xff)
-+ {
-+ *dst = s;
-+ }
-+ else if (s)
-+ {
-+
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%1,$f24)
-+ load8888r(%0,$f20)
-+ expand_alpha($f24,$f26)
-+ over($f24,$f26,$f20)
-+ store8888r($f8,%0)
-+ :"+r"(*dst):"r"(*src):clobber
-+ );
-+ }
-+ dst++;
-+ src++;
-+
-+ }
-+ }
-+}
-+
-+
-+static void
-+ls_composite_over_8888_n_8888 (pixman_implementation_t *imp,
-+ pixman_op_t op,
-+ pixman_image_t * src_image,
-+ pixman_image_t * mask_image,
-+ pixman_image_t * dst_image,
-+ int32_t src_x,
-+ int32_t src_y,
-+ int32_t mask_x,
-+ int32_t mask_y,
-+ int32_t dest_x,
-+ int32_t dest_y,
-+ int32_t width,
-+ int32_t height)
-+{
-+ uint32_t *dst_line, *dst;
-+ uint32_t *src_line, *src;
-+ uint32_t mask;
-+ __m64 vmask;
-+ int dst_stride, src_stride;
-+ int32_t w;
-+ __m64 srca;
-+
-+ PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, uint32_t, dst_stride, dst_line, 1);
-+ PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, uint32_t, src_stride, src_line, 1);
-+
-+ mask = _pixman_image_get_solid (mask_image, dst_image->bits.format);
-+ mask = mask | mask >> 8 | mask >> 16 | mask >> 24;
-+
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888(%1,$f24)
-+ store64a($f24,%0)
-+ :"=m"(vmask):"m"(mask):clobber
-+ );
-+
-+ srca = ls_4x00ff;
-+
-+ while (height--)
-+ {
-+ dst = dst_line;
-+ dst_line += dst_stride;
-+ src = src_line;
-+ src_line += src_stride;
-+ w = width;
-+
-+ while (w)
-+ {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%1,$f20)
-+ load8888r(%0,$f22)
-+ expand_alpha($f20,$f28)
-+ in_over($f20,$f28,$f24,$f22)
-+ store8888r($f8,%0)
-+ :"+r"(*dst):"r"(*src):clobber
-+ );
-+
-+ w--;
-+ dst++;
-+ src++;
-+ }
-+ }
-+}
-+
-+static void
-+ls_composite_over_n_8888 (pixman_implementation_t *imp,
-+ pixman_op_t op,
-+ pixman_image_t * src_image,
-+ pixman_image_t * mask_image,
-+ pixman_image_t * dst_image,
-+ int32_t src_x,
-+ int32_t src_y,
-+ int32_t mask_x,
-+ int32_t mask_y,
-+ int32_t dest_x,
-+ int32_t dest_y,
-+ int32_t width,
-+ int32_t height)
-+{
-+ uint32_t src;
-+ uint32_t *dst_line, *dst;
-+ int32_t w;
-+ int dst_stride;
-+ __m64 vsrc, vsrca;
-+
-+ src = _pixman_image_get_solid (src_image, dst_image->bits.format);
-+
-+ if (src == 0)
-+ return;
-+
-+ PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, uint32_t, dst_stride, dst_line, 1);
-+
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%2,$f24)
-+ store64($f24,%0)
-+ expand_alpha($f24,$f26)
-+ store64($f26,%1)
-+ :"=m"(vsrc), "=m"(vsrca):"r"(src):clobber
-+ );
-+
-+ while (height--)
-+ {
-+ dst = dst_line;
-+ dst_line += dst_stride;
-+ w = width;
-+
-+ while (w)
-+ {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%0,$f28)
-+ over($f24,$f26,$f28)
-+ store8888r($f8,%0)
-+ :"+r"(*dst)::clobber
-+ );
-+
-+ w--;
-+ dst++;
-+ }
-+ }
-+}
-+
-+static void
-+ls_composite_over_n_8888_8888_ca (pixman_implementation_t *imp,
-+ pixman_op_t op,
-+ pixman_image_t * src_image,
-+ pixman_image_t * mask_image,
-+ pixman_image_t * dst_image,
-+ int32_t src_x,
-+ int32_t src_y,
-+ int32_t mask_x,
-+ int32_t mask_y,
-+ int32_t dest_x,
-+ int32_t dest_y,
-+ int32_t width,
-+ int32_t height)
-+{
-+ uint32_t src, srca;
-+ uint32_t *dst_line;
-+ uint32_t *mask_line;
-+ int dst_stride, mask_stride;
-+ __m64 vsrc, vsrca;
-+
-+ src = _pixman_image_get_solid (src_image, dst_image->bits.format);
-+
-+ srca = src >> 24;
-+ if (src == 0)
-+ return;
-+
-+ PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, uint32_t, dst_stride, dst_line, 1);
-+ PIXMAN_IMAGE_GET_LINE (mask_image, mask_x, mask_y, uint32_t, mask_stride, mask_line, 1);
-+
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%2,$f24)
-+ store64($f24,%0)
-+ expand_alpha($f24,$f26)
-+ store64($f26,%1)
-+ :"=m"(vsrc), "=m"(vsrca):"r"(src):clobber
-+ );
-+
-+ while (height--)
-+ {
-+ int twidth = width;
-+ uint32_t *p = (uint32_t *)mask_line;
-+ uint32_t *q = (uint32_t *)dst_line;
-+
-+ while (twidth)
-+ {
-+
-+ if (*p)
-+ {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%0,$f28)
-+ load8888r(%1,$f20)
-+ in_over($f24,$f26,$f20,$f28)
-+ store8888r($f8,%0)
-+ :"+r"(*q):"r"(*p):clobber
-+ );
-+ }
-+ twidth--;
-+ p++;
-+ q++;
-+ }
-+
-+ dst_line += dst_stride;
-+ mask_line += mask_stride;
-+ }
-+}
-+
-+
-+static void
-+ls_composite_over_n_8_8888 (pixman_implementation_t *imp,
-+ pixman_op_t op,
-+ pixman_image_t * src_image,
-+ pixman_image_t * mask_image,
-+ pixman_image_t * dst_image,
-+ int32_t src_x,
-+ int32_t src_y,
-+ int32_t mask_x,
-+ int32_t mask_y,
-+ int32_t dest_x,
-+ int32_t dest_y,
-+ int32_t width,
-+ int32_t height)
-+{
-+ uint32_t src, srca;
-+ uint32_t *dst_line, *dst;
-+ uint8_t *mask_line, *mask;
-+ int dst_stride, mask_stride;
-+ int32_t w;
-+ __m64 vsrc, vsrca;
-+ uint64_t srcsrc;
-+
-+ src = _pixman_image_get_solid (src_image, dst_image->bits.format);
-+
-+ srca = src >> 24;
-+ if (src == 0)
-+ return;
-+
-+ srcsrc = (uint64_t)src << 32 | src;
-+
-+ PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, uint32_t, dst_stride, dst_line, 1);
-+ PIXMAN_IMAGE_GET_LINE (mask_image, mask_x, mask_y, uint8_t, mask_stride, mask_line, 1);
-+
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%2,$f24)
-+ store64a($f24,%0)
-+ expand_alpha($f24,$f26)
-+ store64a($f26,%1)
-+ :"=m"(vsrc), "=m"(vsrca):"r"(src):clobber
-+ );
-+
-+ while (height--)
-+ {
-+ dst = dst_line;
-+ dst_line += dst_stride;
-+ mask = mask_line;
-+ mask_line += mask_stride;
-+ w = width;
-+
-+ while (w)
-+ {
-+ uint32_t m = *mask;
-+
-+ if (m)
-+ {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%0,$f20)
-+ load32r(%1,$f22)
-+ expand_alpha_rev($f22,$f28)
-+ in_over($f24,$f26,$f28,$f20)
-+ store8888r($f8,%0)
-+ :"+r"(*dst):"r"(m):clobber
-+ );
-+ }
-+
-+ w--;
-+ mask++;
-+ dst++;
-+ }
-+ }
-+
-+}
-+
-+static void
-+ls_composite_over_x888_n_8888 (pixman_implementation_t *imp,
-+ pixman_op_t op,
-+ pixman_image_t * src_image,
-+ pixman_image_t * mask_image,
-+ pixman_image_t * dst_image,
-+ int32_t src_x,
-+ int32_t src_y,
-+ int32_t mask_x,
-+ int32_t mask_y,
-+ int32_t dest_x,
-+ int32_t dest_y,
-+ int32_t width,
-+ int32_t height)
-+{
-+ uint32_t *dst_line, *dst;
-+ uint32_t *src_line, *src;
-+ uint32_t mask;
-+ __m64 vmask;
-+ int dst_stride, src_stride;
-+ int32_t w;
-+ __m64 srca;
-+
-+ PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, uint32_t, dst_stride, dst_line, 1);
-+ PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, uint32_t, src_stride, src_line, 1);
-+ mask = _pixman_image_get_solid (mask_image, dst_image->bits.format);
-+
-+ mask &= 0xff000000;
-+ mask = mask | mask >> 8 | mask >> 16 | mask >> 24;
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%1,$f24)
-+ store64a($f24,%0)
-+ :"=m"(vmask):"r"(mask):clobber
-+ );
-+
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load64a(%1,$f26)
-+ store64a($f26,%0)
-+ :"=m"(srca):"m"(ls_4x00ff):clobber
-+ );
-+
-+ while (height--)
-+ {
-+ dst = dst_line;
-+ dst_line += dst_stride;
-+ src = src_line;
-+ src_line += src_stride;
-+ w = width;
-+
-+ while (w)
-+ {
-+ uint32_t src_tmp = *src | 0xff000000;
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%1,$f20)
-+ load8888r(%0,$f22)
-+ in_over($f20,$f26,$f24,$f22)
-+ store8888r($f8,%0)
-+ :"+r"(*dst):"r"(src_tmp):clobber
-+ );
-+
-+ w--;
-+ dst++;
-+ src++;
-+ }
-+ }
-+}
-+
-+
-+static void
-+ls_composite_over_8888_0565 (pixman_implementation_t *imp,
-+ pixman_op_t op,
-+ pixman_image_t * src_image,
-+ pixman_image_t * mask_image,
-+ pixman_image_t * dst_image,
-+ int32_t src_x,
-+ int32_t src_y,
-+ int32_t mask_x,
-+ int32_t mask_y,
-+ int32_t dest_x,
-+ int32_t dest_y,
-+ int32_t width,
-+ int32_t height)
-+{
-+ uint16_t *dst_line, *dst;
-+ uint32_t d;
-+ uint32_t *src_line, *src, s;
-+ uint8_t a;
-+ int dst_stride, src_stride;
-+ int32_t w;
-+
-+ PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, uint32_t, src_stride, src_line, 1);
-+ PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, uint16_t, dst_stride, dst_line, 1);
-+
-+ while (height--)
-+ {
-+ dst = dst_line;
-+ dst_line += dst_stride;
-+ src = src_line;
-+ src_line += src_stride;
-+ w = width;
-+
-+ while (w--)
-+ {
-+ s = *src++;
-+ a = s >> 24;
-+ if (s)
-+ {
-+ if (a == 0xff)
-+ {
-+ d = s;
-+ }
-+ else
-+ {
-+ d = *dst;
-+ d = CONVERT_0565_TO_0888 (d);
-+
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%1,$f24)
-+ load8888r(%0,$f20)
-+ expand_alpha($f24,$f26)
-+ over($f24,$f26,$f20)
-+ store8888r($f8,%0)
-+ :"+r"(d):"r"(s):clobber
-+ );
-+
-+
-+ }
-+ *dst = CONVERT_8888_TO_0565 (d);
-+ }
-+ dst++;
-+ }
-+ }
-+}
-+
-+static void
-+ls_composite_over_n_0565 (pixman_implementation_t *imp,
-+ pixman_op_t op,
-+ pixman_image_t * src_image,
-+ pixman_image_t * mask_image,
-+ pixman_image_t * dst_image,
-+ int32_t src_x,
-+ int32_t src_y,
-+ int32_t mask_x,
-+ int32_t mask_y,
-+ int32_t dest_x,
-+ int32_t dest_y,
-+ int32_t width,
-+ int32_t height)
-+{
-+ uint32_t src;
-+ uint32_t d;
-+ uint16_t *dst_line, *dst;
-+ int32_t w;
-+ int dst_stride;
-+ __m64 vsrc, vsrca;
-+
-+ src = _pixman_image_get_solid (src_image, dst_image->bits.format);
-+
-+ if (src == 0)
-+ return;
-+
-+ PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, uint16_t, dst_stride, dst_line, 1);
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%2,$f24)
-+ store64a($f24,%0)
-+ expand_alpha($f24,$f26)
-+ store64a($f26,%1)
-+ :"=m"(vsrc), "=m"(vsrca):"r"(src):clobber
-+ );
-+
-+ while (height--)
-+ {
-+ dst = dst_line;
-+ dst_line += dst_stride;
-+ w = width;
-+
-+ while (w)
-+ {
-+
-+ d = *dst;
-+ d = CONVERT_0565_TO_0888 (d);
-+
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%0,$f20)
-+
-+ over($f24,$f26,$f20)
-+ store8888r($f8,%0)
-+ :"+r"(d)::clobber
-+ );
-+
-+ *dst = CONVERT_8888_TO_0565 (d);
-+
-+ w--;
-+ dst++;
-+ }
-+ }
-+}
-+
-+static void
-+ls_composite_over_n_8_0565 (pixman_implementation_t *imp,
-+ pixman_op_t op,
-+ pixman_image_t * src_image,
-+ pixman_image_t * mask_image,
-+ pixman_image_t * dst_image,
-+ int32_t src_x,
-+ int32_t src_y,
-+ int32_t mask_x,
-+ int32_t mask_y,
-+ int32_t dest_x,
-+ int32_t dest_y,
-+ int32_t width,
-+ int32_t height)
-+{
-+ uint32_t src, srca, m, d;
-+ uint16_t *dst_line, *dst;
-+ uint8_t *mask_line, *mask;
-+ int dst_stride, mask_stride;
-+ int32_t w;
-+ __m64 vsrc, vsrca;
-+
-+ src = _pixman_image_get_solid (src_image, dst_image->bits.format);
-+
-+ srca = src >> 24;
-+ if (src == 0)
-+ return;
-+
-+ PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, uint16_t, dst_stride, dst_line, 1);
-+ PIXMAN_IMAGE_GET_LINE (mask_image, mask_x, mask_y, uint8_t, mask_stride, mask_line, 1);
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%2,$f24)
-+ store64a($f24,%0)
-+ expand_alpha($f24,$f26)
-+ store64a($f26,%1)
-+ :"=m"(vsrc), "=m"(vsrca):"r"(src):clobber
-+ );
-+
-+ while (height--)
-+ {
-+ dst = dst_line;
-+ dst_line += dst_stride;
-+ mask = mask_line;
-+ mask_line += mask_stride;
-+ w = width;
-+
-+ while (w)
-+ {
-+ m = *mask;
-+ d = *dst;
-+
-+ if (m)
-+ {
-+
-+ d = CONVERT_0565_TO_0888 (d);
-+
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%0,$f20)
-+ load32r(%1,$f22)
-+ expand_alpha_rev($f22,$f28)
-+ in_over($f24,$f26,$f28,$f20)
-+ store8888r($f8,%0)
-+ :"+r"(d):"r"(m):clobber
-+ );
-+
-+ *dst = CONVERT_8888_TO_0565 (d);
-+
-+ }
-+
-+ w--;
-+ mask++;
-+ dst++;
-+ }
-+ }
-+}
-+
-+static void
-+ls_composite_over_n_8888_0565_ca (pixman_implementation_t *imp,
-+ pixman_op_t op,
-+ pixman_image_t * src_image,
-+ pixman_image_t * mask_image,
-+ pixman_image_t * dst_image,
-+ int32_t src_x,
-+ int32_t src_y,
-+ int32_t mask_x,
-+ int32_t mask_y,
-+ int32_t dest_x,
-+ int32_t dest_y,
-+ int32_t width,
-+ int32_t height)
-+{
-+ uint32_t src, srca, m, d;
-+ uint16_t *dst_line;
-+ uint32_t *mask_line;
-+ int dst_stride, mask_stride;
-+ __m64 vsrc, vsrca;
-+
-+ src = _pixman_image_get_solid (src_image, dst_image->bits.format);
-+
-+ srca = src >> 24;
-+ if (src == 0)
-+ return;
-+
-+ PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, uint16_t, dst_stride, dst_line, 1);
-+ PIXMAN_IMAGE_GET_LINE (mask_image, mask_x, mask_y, uint32_t, mask_stride, mask_line, 1);
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%2,$f24)
-+ store64a($f24,%0)
-+ expand_alpha($f24,$f26)
-+ store64a($f26,%1)
-+ :"=m"(vsrc), "=m"(vsrca):"r"(src):clobber
-+ );
-+
-+ while (height--)
-+ {
-+ int twidth = width;
-+ uint32_t *p = (uint32_t *)mask_line;
-+ uint16_t *q = (uint16_t *)dst_line;
-+
-+ while (twidth)
-+ {
-+
-+ m = *(uint32_t *)p;
-+ d = *q;
-+
-+ if (m)
-+ {
-+
-+ d = CONVERT_0565_TO_0888 (d);
-+
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%0,$f20)
-+ load8888r(%1,$f22)
-+ in_over($f24,$f26,$f22,$f20)
-+ store8888r($f8,%0)
-+ :"+r"(d):"r"(m):clobber
-+ );
-+
-+ *q = CONVERT_8888_TO_0565 (d);
-+
-+ }
-+
-+ twidth--;
-+ p++;
-+ q++;
-+ }
-+
-+ mask_line += mask_stride;
-+ dst_line += dst_stride;
-+ }
-+}
-+static void
-+ls_composite_over_pixbuf_8888 (pixman_implementation_t *imp,
-+ pixman_op_t op,
-+ pixman_image_t * src_image,
-+ pixman_image_t * mask_image,
-+ pixman_image_t * dst_image,
-+ int32_t src_x,
-+ int32_t src_y,
-+ int32_t mask_x,
-+ int32_t mask_y,
-+ int32_t dest_x,
-+ int32_t dest_y,
-+ int32_t width,
-+ int32_t height)
-+{
-+ uint32_t *dst_line, *dst;
-+ uint32_t *src_line, *src;
-+ int dst_stride, src_stride;
-+ int32_t w;
-+
-+ PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, uint32_t, dst_stride, dst_line, 1);
-+ PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, uint32_t, src_stride, src_line, 1);
-+
-+#if 0
-+ /* FIXME */
-+ assert (src_image->drawable == mask_image->drawable);
-+#endif
-+
-+ while (height--)
-+ {
-+ dst = dst_line;
-+ dst_line += dst_stride;
-+ src = src_line;
-+ src_line += src_stride;
-+ w = width;
-+
-+ while (w)
-+ {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%1,$f22)
-+ load8888r(%0,$f20)
-+ over_rev_non_pre($f22,$f20)
-+ store8888r($f8,%0)
-+ :"+r"(*dst):"r"(*src):clobber
-+ );
-+
-+ w--;
-+ dst++;
-+ src++;
-+ }
-+ }
-+}
-+static void
-+ls_composite_over_pixbuf_0565 (pixman_implementation_t *imp,
-+ pixman_op_t op,
-+ pixman_image_t * src_image,
-+ pixman_image_t * mask_image,
-+ pixman_image_t * dst_image,
-+ int32_t src_x,
-+ int32_t src_y,
-+ int32_t mask_x,
-+ int32_t mask_y,
-+ int32_t dest_x,
-+ int32_t dest_y,
-+ int32_t width,
-+ int32_t height)
-+{
-+ uint16_t *dst_line, *dst;
-+ uint32_t *src_line, *src, d;
-+ int dst_stride, src_stride;
-+ int32_t w;
-+
-+ PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, uint16_t, dst_stride, dst_line, 1);
-+ PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, uint32_t, src_stride, src_line, 1);
-+
-+#if 0
-+ /* FIXME */
-+ assert (src_image->drawable == mask_image->drawable);
-+#endif
-+
-+ while (height--)
-+ {
-+ dst = dst_line;
-+ dst_line += dst_stride;
-+ src = src_line;
-+ src_line += src_stride;
-+ w = width;
-+
-+ while (w)
-+ {
-+
-+ d = *dst;
-+ d = CONVERT_0565_TO_0888 (d);
-+
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%1,$f20)
-+ load8888r(%0,$f24)
-+ over_rev_non_pre($f20,$f24)
-+ store8888r($f8,%0)
-+ :"+r"(d):"r"(*src):clobber
-+ );
-+
-+ *dst = CONVERT_8888_TO_0565 (d);
-+
-+ w--;
-+ dst++;
-+ src++;
-+ }
-+ }
-+}
-+
-+static void
-+ls_composite_src_n_8_8888 (pixman_implementation_t *imp,
-+ pixman_op_t op,
-+ pixman_image_t * src_image,
-+ pixman_image_t * mask_image,
-+ pixman_image_t * dst_image,
-+ int32_t src_x,
-+ int32_t src_y,
-+ int32_t mask_x,
-+ int32_t mask_y,
-+ int32_t dest_x,
-+ int32_t dest_y,
-+ int32_t width,
-+ int32_t height)
-+{
-+ uint32_t src, srca;
-+ uint32_t *dst_line, *dst, m;
-+ uint8_t *mask_line, *mask;
-+ int dst_stride, mask_stride;
-+ int32_t w;
-+ __m64 vsrc, vsrca;
-+ uint64_t srcsrc;
-+
-+ src = _pixman_image_get_solid (src_image, dst_image->bits.format);
-+
-+ srca = src >> 24;
-+ if (src == 0)
-+ {
-+ pixman_fill_ls (dst_image->bits.bits, dst_image->bits.rowstride,
-+ PIXMAN_FORMAT_BPP (dst_image->bits.format),
-+ dest_x, dest_y, width, height, 0);
-+ return;
-+ }
-+
-+ srcsrc = (uint64_t)src << 32 | src;
-+
-+ PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, uint32_t, dst_stride, dst_line, 1);
-+ PIXMAN_IMAGE_GET_LINE (mask_image, mask_x, mask_y, uint8_t, mask_stride, mask_line, 1);
-+
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load8888r(%2,$f24)
-+ store64a($f24,%0)
-+ expand_alpha($f24,$f26)
-+ store64a($f26,%1)
-+ :"=m"(vsrc), "=m"(vsrca):"r"(src):clobber
-+ );
-+ while (height--)
-+ {
-+ dst = dst_line;
-+ dst_line += dst_stride;
-+ mask = mask_line;
-+ mask_line += mask_stride;
-+ w = width;
-+
-+ while (w)
-+ {
-+ m = *mask;
-+
-+ if (m)
-+ {
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ load32r(%1,$f20)
-+ expand_alpha_rev($f20,$f28)
-+ in($f24,$f28)
-+ store8888r($f8,%0)
-+ :"=r"(*dst):"r"(m):clobber
-+ );
-+
-+ }
-+ else
-+ {
-+ *dst = 0;
-+ }
-+
-+ w--;
-+ mask++;
-+ dst++;
-+ }
-+ }
-+}
-diff -urN pixman//pixman/pixman-cpu.c Pixman.Loongson//pixman/pixman-cpu.c
---- pixman//pixman/pixman-cpu.c 2010-12-25 18:46:00.073234000 +0800
-+++ Pixman.Loongson//pixman/pixman-cpu.c 2010-12-25 18:39:15.360337000 +0800
-@@ -579,7 +579,9 @@
- if (pixman_have_mmx ())
- return _pixman_implementation_create_mmx ();
- #endif
--
-+#ifdef USE_LS
-+ return _pixman_implementation_create_ls ();
-+#endif
- #ifdef USE_ARM_NEON
- if (pixman_have_arm_neon ())
- return _pixman_implementation_create_arm_neon ();
-diff -urN pixman//pixman/pixman-ls.c Pixman.Loongson//pixman/pixman-ls.c
---- pixman//pixman/pixman-ls.c 1970-01-01 08:00:00.000000000 +0800
-+++ Pixman.Loongson//pixman/pixman-ls.c 2010-12-25 18:39:15.386759000 +0800
-@@ -0,0 +1,538 @@
-+/*
-+* Based on pixman-mmx.c
-+* Implemented for loongson 2F only.
-+* Free software based on GPL licence.
-+* Copyright 2010 WG Ge.
-+*/
-+
-+#ifdef HAVE_CONFIG_H
-+#include <config.h>
-+#endif
-+#include <stdlib.h>
-+#include <string.h>
-+#include <math.h>
-+#include <limits.h>
-+#include <stdio.h>
-+#include "pixman-private.h"
-+#include "pixman-combine32.h"
-+#include "primitive.h"
-+
-+#define __m64 __attribute__ ((aligned (8))) uint64_t
-+#define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v
-+#define DECLARE_ALIGNED_8(t, v, ...) DECLARE_ALIGNED(8, t, v)
-+
-+DECLARE_ALIGNED_8 (const uint64_t, ls_4x00ff ) = 0x00ff00ff00ff00ffULL;
-+DECLARE_ALIGNED_8 (const uint64_t, ls_4x0080 ) = 0x0080008000800080ULL;
-+DECLARE_ALIGNED_8 (const uint64_t, ls_565_rgb ) = 0x000001f0003f001fULL;
-+DECLARE_ALIGNED_8 (const uint64_t, ls_565_unpack_multiplier ) = 0x0000008404100840ULL;
-+DECLARE_ALIGNED_8 (const uint64_t, ls_565_r ) = 0x000000f800000000ULL;
-+DECLARE_ALIGNED_8 (const uint64_t, ls_565_g ) = 0x0000000000fc0000ULL;
-+DECLARE_ALIGNED_8 (const uint64_t, ls_565_b ) = 0x00000000000000f8ULL;
-+DECLARE_ALIGNED_8 (const uint64_t, ls_mask_0 ) = 0xffffffffffff0000ULL;
-+DECLARE_ALIGNED_8 (const uint64_t, ls_mask_1 ) = 0xffffffff0000ffffULL;
-+DECLARE_ALIGNED_8 (const uint64_t, ls_mask_2 ) = 0xffff0000ffffffffULL;
-+DECLARE_ALIGNED_8 (const uint64_t, ls_mask_3 ) = 0x0000ffffffffffffULL;
-+DECLARE_ALIGNED_8 (const uint64_t, ls_full_alpha ) = 0x00ff000000000000ULL;
-+DECLARE_ALIGNED_8 (const uint64_t, ls_ffff0000ffff0000 ) = 0xffff0000ffff0000ULL;
-+DECLARE_ALIGNED_8 (const uint64_t, ls_0000ffff00000000 ) = 0x0000ffff00000000ULL;
-+DECLARE_ALIGNED_8 (const uint64_t, ls_000000000000ffff ) = 0x000000000000ffffULL;
-+
-+
-+pixman_bool_t
-+pixman_fill_ls (uint32_t *bits,
-+ int stride,
-+ int bpp,
-+ int x,
-+ int y,
-+ int width,
-+ int height,
-+ uint32_t xor)
-+{
-+ uint64_t fill;
-+ uint32_t byte_width;
-+ uint8_t *byte_line;
-+
-+
-+
-+ if (bpp != 16 && bpp != 32 && bpp != 8)
-+ return FALSE;
-+
-+ if (bpp == 8)
-+ {
-+ stride = stride * (int) sizeof (uint32_t) / 1;
-+ byte_line = (uint8_t *)(((uint8_t *)bits) + stride * y + x);
-+ byte_width = width;
-+ stride *= 1;
-+ xor = (xor & 0xff) * 0x01010101;
-+ }
-+ else if (bpp == 16)
-+ {
-+ stride = stride * (int) sizeof (uint32_t) / 2;
-+ byte_line = (uint8_t *)(((uint16_t *)bits) + stride * y + x);
-+ byte_width = 2 * width;
-+ stride *= 2;
-+ xor = (xor & 0xffff) * 0x00010001;
-+ }
-+ else
-+ {
-+ stride = stride * (int) sizeof (uint32_t) / 4;
-+ byte_line = (uint8_t *)(((uint32_t *)bits) + stride * y + x);
-+ byte_width = 4 * width;
-+ stride *= 4;
-+ }
-+
-+ fill = ((uint64_t)xor << 32) | xor;
-+
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ "ldc1 $f24, %0 \n\t"
-+ ::"m"(fill):"$f24"
-+ );
-+ while (height--)
-+ {
-+ int w;
-+ uint8_t *d = byte_line;
-+
-+ byte_line += stride;
-+ w = byte_width;
-+
-+ while (w >= 1 && ((unsigned long)d & 1))
-+ {
-+ *(uint8_t *)d = (xor & 0xff);
-+ w--;
-+ d++;
-+ }
-+
-+ while (w >= 2 && ((unsigned long)d & 3))
-+ {
-+ *(uint16_t *)d = xor;
-+ w -= 2;
-+ d += 2;
-+ }
-+
-+ while (w >= 4 && ((unsigned long)d & 7))
-+ {
-+ *(uint32_t *)d = xor;
-+
-+ w -= 4;
-+ d += 4;
-+ }
-+
-+ while (w >= 64)
-+ {
-+
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ "dmfc1 $8, $f24 \n\t"
-+ "sd $8 , (%0) \n\t"
-+ "sd $8 , 8(%0) \n\t"
-+ "sd $8 , 16(%0) \n\t"
-+ "sd $8 , 24(%0) \n\t"
-+ "sd $8 , 32(%0) \n\t"
-+ "sd $8 , 40(%0) \n\t"
-+ "sd $8 , 48(%0) \n\t"
-+ "sd $8 , 56(%0) \n\t"
-+ ::"r"(d):"$8","memory","$f24"
-+ );
-+ w -= 64;
-+ d += 64;
-+ }
-+
-+ while (w >= 4)
-+ {
-+ *(uint32_t *)d = xor;
-+
-+ w -= 4;
-+ d += 4;
-+ }
-+ while (w >= 2)
-+ {
-+ *(uint16_t *)d = xor;
-+ w -= 2;
-+ d += 2;
-+ }
-+ while (w >= 1)
-+ {
-+ *(uint8_t *)d = (xor & 0xff);
-+ w--;
-+ d++;
-+ }
-+
-+ }
-+ return TRUE;
-+}
-+
-+static pixman_bool_t
-+pixman_blt_ls (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 dst_x,
-+ int dst_y,
-+ int width,
-+ int height)
-+{
-+ uint8_t * src_bytes;
-+ uint8_t * dst_bytes;
-+ int byte_width;
-+
-+ if (src_bpp != dst_bpp)
-+ return FALSE;
-+
-+ if (src_bpp == 16)
-+ {
-+ src_stride = src_stride * (int) sizeof (uint32_t) / 2;
-+ dst_stride = dst_stride * (int) sizeof (uint32_t) / 2;
-+ src_bytes = (uint8_t *)(((uint16_t *)src_bits) + src_stride * (src_y) + (src_x));
-+ dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
-+ byte_width = 2 * width;
-+ src_stride *= 2;
-+ dst_stride *= 2;
-+ }
-+ else if (src_bpp == 32)
-+ {
-+ src_stride = src_stride * (int) sizeof (uint32_t) / 4;
-+ dst_stride = dst_stride * (int) sizeof (uint32_t) / 4;
-+ src_bytes = (uint8_t *)(((uint32_t *)src_bits) + src_stride * (src_y) + (src_x));
-+ dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
-+ byte_width = 4 * width;
-+ src_stride *= 4;
-+ dst_stride *= 4;
-+ }
-+ else
-+ {
-+ return FALSE;
-+ }
-+
-+ while (height--)
-+ {
-+ int w;
-+ uint8_t *s = src_bytes;
-+ uint8_t *d = dst_bytes;
-+ src_bytes += src_stride;
-+ dst_bytes += dst_stride;
-+ w = byte_width;
-+
-+ while (w >= 2 && ((unsigned long)d & 3))
-+ {
-+ *(uint16_t *)d = *(uint16_t *)s;
-+ w -= 2;
-+ s += 2;
-+ d += 2;
-+ }
-+
-+ while (w >= 4 && ((unsigned long)d & 7))
-+ {
-+ *(uint32_t *)d = *(uint32_t *)s;
-+
-+ w -= 4;
-+ s += 4;
-+ d += 4;
-+ }
-+ if ((unsigned long)s & 7)
-+{
-+ while (w >= 64)
-+ {
-+
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ "uld $8 , (%1) \n\t"
-+ "uld $9 , 8(%1) \n\t"
-+ "uld $10, 16(%1) \n\t"
-+ "uld $11, 24(%1) \n\t"
-+ "sd $8 , (%0) \n\t"
-+ "sd $9 , 8(%0) \n\t"
-+ "sd $10, 16(%0) \n\t"
-+ "sd $11, 24(%0) \n\t"
-+
-+ "uld $8 , 32(%1) \n\t"
-+ "uld $9 , 40(%1) \n\t"
-+ "uld $10, 48(%1) \n\t"
-+ "uld $11, 56(%1) \n\t"
-+ "sd $8 , 32(%0) \n\t"
-+ "sd $9 , 40(%0) \n\t"
-+ "sd $10, 48(%0) \n\t"
-+ "sd $11, 56(%0) \n\t"
-+ ::"r"(d),"r"(s):"$8","$9","$10","$11","memory"
-+ );
-+ w -= 64;
-+ s += 64;
-+ d += 64;
-+ }
-+}
-+else
-+{
-+ while (w >= 64)
-+ {
-+
-+ __asm__ volatile (
-+ ".set arch=loongson2f \n\t"
-+ "ld $8 , (%1) \n\t"
-+ "ld $9 , 8(%1) \n\t"
-+ "ld $10, 16(%1) \n\t"
-+ "ld $11, 24(%1) \n\t"
-+ "sd $8 , (%0) \n\t"
-+ "sd $9 , 8(%0) \n\t"
-+ "sd $10, 16(%0) \n\t"
-+ "sd $11, 24(%0) \n\t"
-+
-+ "ld $8 , 32(%1) \n\t"
-+ "ld $9 , 40(%1) \n\t"
-+ "ld $10, 48(%1) \n\t"
-+ "ld $11, 56(%1) \n\t"
-+ "sd $8 , 32(%0) \n\t"
-+ "sd $9 , 40(%0) \n\t"
-+ "sd $10, 48(%0) \n\t"
-+ "sd $11, 56(%0) \n\t"
-+ ::"r"(d),"r"(s):"$8","$9","$10","$11","memory"
-+ );
-+ w -= 64;
-+ s += 64;
-+ d += 64;
-+ }
-+}
-+
-+ while (w >= 4)
-+ {
-+ *(uint32_t *)d = *(uint32_t *)s;
-+
-+ w -= 4;
-+ s += 4;
-+ d += 4;
-+ }
-+ if (w >= 2)
-+ {
-+ *(uint16_t *)d = *(uint16_t *)s;
-+ w -= 2;
-+ s += 2;
-+ d += 2;
-+ }
-+ }
-+ return TRUE;
-+}
-+
-+
-+#include "pixman-composite-ls.c"
-+#include "pixman-combine-ls.c"
-+
-+static pixman_bool_t
-+ls_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 dst_x,
-+ int dst_y,
-+ int width,
-+ int height)
-+{
-+ if (!pixman_blt_ls (
-+ src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
-+ src_x, src_y, dst_x, dst_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, dst_x, dst_y, width, height);
-+ }
-+
-+ return TRUE;
-+}
-+
-+static pixman_bool_t
-+ls_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_ls (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 void
-+ls_composite_copy_area (pixman_implementation_t *imp,
-+ pixman_op_t op,
-+ pixman_image_t * src_image,
-+ pixman_image_t * mask_image,
-+ pixman_image_t * dst_image,
-+ int32_t src_x,
-+ int32_t src_y,
-+ int32_t mask_x,
-+ int32_t mask_y,
-+ int32_t dest_x,
-+ int32_t dest_y,
-+ int32_t width,
-+ int32_t height)
-+{
-+ pixman_blt_ls (src_image->bits.bits,
-+ dst_image->bits.bits,
-+ src_image->bits.rowstride,
-+ dst_image->bits.rowstride,
-+ PIXMAN_FORMAT_BPP (src_image->bits.format),
-+ PIXMAN_FORMAT_BPP (dst_image->bits.format),
-+ src_x, src_y, dest_x, dest_y, width, height);
-+}
-+
-+
-+static const pixman_fast_path_t ls_fast_paths[] =
-+{
-+
-+//these are implemented so far
-+#if 1
-+ PIXMAN_STD_FAST_PATH (OVER, x8r8g8b8, a8, x8r8g8b8, ls_composite_over_x888_8_8888 ),
-+ PIXMAN_STD_FAST_PATH (OVER, x8r8g8b8, a8, a8r8g8b8, ls_composite_over_x888_8_8888 ),
-+ PIXMAN_STD_FAST_PATH (OVER, x8b8g8r8, a8, x8b8g8r8, ls_composite_over_x888_8_8888 ),
-+ PIXMAN_STD_FAST_PATH (OVER, x8b8g8r8, a8, a8b8g8r8, ls_composite_over_x888_8_8888 ),
-+#endif
-+
-+#if 1
-+//over_8888_0565 significant perf improvement, slight better L1, L2, 30% better RT
-+ PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, r5g6b5, ls_composite_over_8888_0565 ),
-+ PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null, b5g6r5, ls_composite_over_8888_0565 ),
-+ PIXMAN_STD_FAST_PATH (OVER, pixbuf, pixbuf, r5g6b5, ls_composite_over_pixbuf_0565 ),
-+ PIXMAN_STD_FAST_PATH (OVER, rpixbuf, rpixbuf, b5g6r5, ls_composite_over_pixbuf_0565 ),
-+
-+//big improvement some closing 100%
-+ PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8b8g8r8, b5g6r5, ls_composite_over_n_8888_0565_ca ),
-+ PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8r8g8b8, r5g6b5, ls_composite_over_n_8888_0565_ca ),
-+ PIXMAN_STD_FAST_PATH (OVER, solid, a8, r5g6b5, ls_composite_over_n_8_0565 ),
-+ PIXMAN_STD_FAST_PATH (OVER, solid, a8, b5g6r5, ls_composite_over_n_8_0565 ),
-+ PIXMAN_STD_FAST_PATH (OVER, solid, null, r5g6b5, ls_composite_over_n_0565 ),
-+
-+//ubalbe to bench with lowlevel bench, believe it is a gain in perf
-+ PIXMAN_STD_FAST_PATH (OVER, x8r8g8b8, solid, a8r8g8b8, ls_composite_over_x888_n_8888 ),
-+ PIXMAN_STD_FAST_PATH (OVER, x8r8g8b8, solid, x8r8g8b8, ls_composite_over_x888_n_8888 ),
-+ PIXMAN_STD_FAST_PATH (OVER, x8b8g8r8, solid, a8b8g8r8, ls_composite_over_x888_n_8888 ),
-+ PIXMAN_STD_FAST_PATH (OVER, x8b8g8r8, solid, x8b8g8r8, ls_composite_over_x888_n_8888 ),
-+
-+//performance regress 30% in L1,L2, but significant improvement in RT
-+ PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null, a8b8g8r8, ls_composite_over_8888_8888 ),
-+ PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null, x8b8g8r8, ls_composite_over_8888_8888 ),
-+ PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, a8r8g8b8, ls_composite_over_8888_8888 ),
-+ PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, x8r8g8b8, ls_composite_over_8888_8888 ),
-+ PIXMAN_STD_FAST_PATH (OVER, pixbuf, pixbuf, a8r8g8b8, ls_composite_over_pixbuf_8888 ),
-+ PIXMAN_STD_FAST_PATH (OVER, pixbuf, pixbuf, x8r8g8b8, ls_composite_over_pixbuf_8888 ),
-+ PIXMAN_STD_FAST_PATH (OVER, rpixbuf, rpixbuf, a8b8g8r8, ls_composite_over_pixbuf_8888 ),
-+ PIXMAN_STD_FAST_PATH (OVER, rpixbuf, rpixbuf, x8b8g8r8, ls_composite_over_pixbuf_8888 ),
-+
-+//same performance in L1,L2, but significant improvement in RT 30-40%
-+ PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, solid, a8r8g8b8, ls_composite_over_8888_n_8888 ),
-+ PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, solid, x8r8g8b8, ls_composite_over_8888_n_8888 ),
-+ PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, solid, a8b8g8r8, ls_composite_over_8888_n_8888 ),
-+ PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, solid, x8b8g8r8, ls_composite_over_8888_n_8888 ),
-+
-+//significant perf improvement 20%
-+ PIXMAN_STD_FAST_PATH (OVER, solid, a8, a8r8g8b8, ls_composite_over_n_8_8888 ),
-+ PIXMAN_STD_FAST_PATH (OVER, solid, a8, x8r8g8b8, ls_composite_over_n_8_8888 ),
-+ PIXMAN_STD_FAST_PATH (OVER, solid, a8, a8b8g8r8, ls_composite_over_n_8_8888 ),
-+ PIXMAN_STD_FAST_PATH (OVER, solid, a8, x8b8g8r8, ls_composite_over_n_8_8888 ),
-+
-+//3 times perf improvements
-+ PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8r8g8b8, a8r8g8b8, ls_composite_over_n_8888_8888_ca ),
-+ PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8r8g8b8, x8r8g8b8, ls_composite_over_n_8888_8888_ca ),
-+ PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8b8g8r8, a8b8g8r8, ls_composite_over_n_8888_8888_ca ),
-+ PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8b8g8r8, x8b8g8r8, ls_composite_over_n_8888_8888_ca ),
-+
-+//significant performance boost
-+ PIXMAN_STD_FAST_PATH (OVER, solid, null, a8r8g8b8, ls_composite_over_n_8888 ),
-+ PIXMAN_STD_FAST_PATH (OVER, solid, null, x8r8g8b8, ls_composite_over_n_8888 ),
-+//simple add, expect better perf in generic code
-+// PIXMAN_STD_FAST_PATH (ADD, a8r8g8b8, null, a8r8g8b8, ls_composite_add_8888_8888 ),
-+// PIXMAN_STD_FAST_PATH (ADD, a8b8g8r8, null, a8b8g8r8, ls_composite_add_8888_8888 ),
-+
-+// FIXME: Copy memory are not better than geneic code
-+#if 0
-+ PIXMAN_STD_FAST_PATH (SRC, a8r8g8b8, null, a8r8g8b8, ls_composite_copy_area ),
-+ PIXMAN_STD_FAST_PATH (SRC, a8b8g8r8, null, a8b8g8r8, ls_composite_copy_area ),
-+ PIXMAN_STD_FAST_PATH (SRC, a8r8g8b8, null, x8r8g8b8, ls_composite_copy_area ),
-+ PIXMAN_STD_FAST_PATH (SRC, a8b8g8r8, null, x8b8g8r8, ls_composite_copy_area ),
-+ PIXMAN_STD_FAST_PATH (SRC, x8r8g8b8, null, x8r8g8b8, ls_composite_copy_area ),
-+ PIXMAN_STD_FAST_PATH (SRC, x8b8g8r8, null, x8b8g8r8, ls_composite_copy_area ),
-+ PIXMAN_STD_FAST_PATH (SRC, r5g6b5, null, r5g6b5, ls_composite_copy_area ),
-+ PIXMAN_STD_FAST_PATH (SRC, b5g6r5, null, b5g6r5, ls_composite_copy_area ),
-+ PIXMAN_STD_FAST_PATH (OVER, x8r8g8b8, null, x8r8g8b8, ls_composite_copy_area ),
-+ PIXMAN_STD_FAST_PATH (OVER, x8b8g8r8, null, x8b8g8r8, ls_composite_copy_area ),
-+#endif
-+
-+//significant improvement
-+ PIXMAN_STD_FAST_PATH (SRC, solid, a8, a8r8g8b8, ls_composite_src_n_8_8888 ),
-+ PIXMAN_STD_FAST_PATH (SRC, solid, a8, x8r8g8b8, ls_composite_src_n_8_8888 ),
-+ PIXMAN_STD_FAST_PATH (SRC, solid, a8, a8b8g8r8, ls_composite_src_n_8_8888 ),
-+ PIXMAN_STD_FAST_PATH (SRC, solid, a8, x8b8g8r8, ls_composite_src_n_8_8888 ),
-+
-+#endif
-+
-+//these are not yet implemented
-+
-+#if 0
-+
-+ PIXMAN_STD_FAST_PATH (ADD, a8, null, a8, ls_composite_add_8000_8000 ),
-+ PIXMAN_STD_FAST_PATH (ADD, solid, a8, a8, ls_composite_add_n_8_8 ),
-+ PIXMAN_STD_FAST_PATH (IN, a8, null, a8, ls_composite_in_8_8 ),
-+ PIXMAN_STD_FAST_PATH (IN, solid, a8, a8, ls_composite_in_n_8_8 ),
-+#endif
-+
-+
-+ { PIXMAN_OP_NONE },
-+};
-+
-+pixman_implementation_t *
-+_pixman_implementation_create_ls (void)
-+{
-+ pixman_implementation_t *general = _pixman_implementation_create_fast_path ();
-+ pixman_implementation_t *imp = _pixman_implementation_create (general, ls_fast_paths);
-+
-+//Turned on but unable to benchmark.
-+#if 1
-+ imp->combine_32[PIXMAN_OP_OVER] = ls_combine_over_u;
-+ imp->combine_32[PIXMAN_OP_OVER_REVERSE] = ls_combine_over_reverse_u;
-+ imp->combine_32[PIXMAN_OP_IN] = ls_combine_in_u;
-+ imp->combine_32[PIXMAN_OP_IN_REVERSE] = ls_combine_in_reverse_u;
-+ imp->combine_32[PIXMAN_OP_OUT] = ls_combine_out_u;
-+ imp->combine_32[PIXMAN_OP_OUT_REVERSE] = ls_combine_out_reverse_u;
-+ imp->combine_32[PIXMAN_OP_ATOP] = ls_combine_atop_u;
-+ imp->combine_32[PIXMAN_OP_ATOP_REVERSE] = ls_combine_atop_reverse_u;
-+ imp->combine_32[PIXMAN_OP_XOR] = ls_combine_xor_u;
-+ imp->combine_32[PIXMAN_OP_ADD] = ls_combine_add_u;
-+ imp->combine_32[PIXMAN_OP_SATURATE] = ls_combine_saturate_u;
-+
-+ imp->combine_32_ca[PIXMAN_OP_SRC] = ls_combine_src_ca;
-+ imp->combine_32_ca[PIXMAN_OP_OVER] = ls_combine_over_ca;
-+ imp->combine_32_ca[PIXMAN_OP_OVER_REVERSE] = ls_combine_over_reverse_ca;
-+ imp->combine_32_ca[PIXMAN_OP_IN] = ls_combine_in_ca;
-+ imp->combine_32_ca[PIXMAN_OP_IN_REVERSE] = ls_combine_in_reverse_ca;
-+ imp->combine_32_ca[PIXMAN_OP_OUT] = ls_combine_out_ca;
-+ imp->combine_32_ca[PIXMAN_OP_OUT_REVERSE] = ls_combine_out_reverse_ca;
-+ imp->combine_32_ca[PIXMAN_OP_ATOP] = ls_combine_atop_ca;
-+ imp->combine_32_ca[PIXMAN_OP_ATOP_REVERSE] = ls_combine_atop_reverse_ca;
-+ imp->combine_32_ca[PIXMAN_OP_XOR] = ls_combine_xor_ca;
-+ imp->combine_32_ca[PIXMAN_OP_ADD] = ls_combine_add_ca;
-+#endif
-+
-+//FIXME blt and fill not shown better perf than geneic code
-+#if 0
-+ imp->blt = ls_blt;
-+ imp->fill = ls_fill;
-+#endif
-+
-+ return imp;
-+}
-+
-diff -urN pixman//pixman/pixman-private.h Pixman.Loongson//pixman/pixman-private.h
---- pixman//pixman/pixman-private.h 2010-12-25 18:46:00.102841000 +0800
-+++ Pixman.Loongson//pixman/pixman-private.h 2010-12-25 18:39:15.401808000 +0800
-@@ -493,6 +493,11 @@
- pixman_implementation_t *
- _pixman_implementation_create_fast_path (void);
-
-+#ifdef USE_LS
-+pixman_implementation_t *
-+_pixman_implementation_create_ls (void);
-+#endif
-+
- #ifdef USE_MMX
- pixman_implementation_t *
- _pixman_implementation_create_mmx (void);
-diff -urN pixman//pixman/primitive.h Pixman.Loongson//pixman/primitive.h
---- pixman//pixman/primitive.h 1970-01-01 08:00:00.000000000 +0800
-+++ Pixman.Loongson//pixman/primitive.h 2010-12-25 18:39:15.457084000 +0800
-@@ -0,0 +1,214 @@
-+/*
-+* MMX register usage protocal
-+* return result: f8
-+* tmp immediate f12
-+* tmp register in primtive f14 f16 f18
-+* tmp register in pixman f0,f4,f6,f10,f20,f22,
-+* globals in function f24, f26, f28,f30
-+* Exceptions for load and store:
-+* load will specify dest FPR register
-+* store will specify src FPR register
-+* expand_alpha(_rev) implemented with GPR, dest FPR as the 2nd parameter
-+*
-+* Special alert: don't use return result $f8 as input, it might be overwritten
-+*/
-+
-+
-+/*primitive macros */
-+
-+#define clobber "$8","$9","$f0","$f2","$f8",\
-+ "$f12","$f14","$f16","$f18","$f20",\
-+ "$f22","$f24","$f26","$f28","$f30"
-+
-+#define DMTC1_IMM(regc1,imm) \
-+ "dli $8, "#imm" \n\t" \
-+ "dmtc1 $8, "#regc1" \n\t"
-+
-+#define MTC1_IMM(regc1,imm) \
-+ "li $8, "#imm" \n\t" \
-+ "dmtc1 $8, "#regc1" \n\t"
-+
-+
-+#define save_to(reg1) "mov.d "#reg1", $f8 \n\t"
-+#define zero(reg1) "xor "#reg1","#reg1","#reg1" \n\t"
-+
-+#define load32(sp,reg1) \
-+ "ulw $8, "#sp" \n\t" \
-+ "dmtc1 $8, "#reg1" \n\t"
-+
-+#define load32a(sp,reg1) \
-+ "lw $8, "#sp" \n\t" \
-+ "dmtc1 $8, "#reg1" \n\t"
-+
-+#define load32r(sp,reg1) \
-+ "dmtc1 "#sp", "#reg1" \n\t"
-+
-+#define load64(sp,reg1) \
-+ "uld $8, "#sp" \n\t" \
-+ "dmtc1 $8, "#reg1" \n\t"
-+
-+#define load64a(sp,reg1) \
-+ "ld $8, "#sp" \n\t" \
-+ "dmtc1 $8, "#reg1" \n\t"
-+
-+
-+#define store32(reg1,sp) \
-+ "dmfc1 $8, "#reg1" \n\t" \
-+ "usw $8, "#sp" \n\t"
-+
-+#define store32r(reg1,sp) \
-+ "dmfc1 "#sp", "#reg1" \n\t"
-+
-+#define store32a(reg1,sp) \
-+ "swc1 "#reg1", "#sp" \n\t"
-+
-+#define store64(reg1,sp) \
-+ "dmfc1 $8, "#reg1" \n\t" \
-+ "usd $8, "#sp" \n\t"
-+
-+#define store64a(reg1,sp) \
-+ "sdc1 "#reg1", "#sp" \n\t"
-+
-+#define load8888(sp,reg1) \
-+ load64(sp,reg1) \
-+ "xor $f12, $f12, $f12 \n\t" \
-+ "punpcklbh "#reg1", "#reg1", $f12 \n\t"
-+
-+#define load8888r(sp,reg1) \
-+ load32r(sp,reg1) \
-+ "xor $f12, $f12, $f12 \n\t" \
-+ "punpcklbh "#reg1", "#reg1", $f12 \n\t"
-+
-+#define load8888a(sp,reg1) \
-+ load64a(sp,reg1) \
-+ "xor $f12, $f12, $f12 \n\t" \
-+ "punpcklbh "#reg1", "#reg1", $f12 \n\t"
-+
-+#define load8888ah(sp,reg1) \
-+ load64a(sp,reg1) \
-+ "xor $f12, $f12, $f12 \n\t" \
-+ "punpckhbh "#reg1", "#reg1", $f12 \n\t"
-+
-+#define store8888(reg1,sp) \
-+ "xor $f12, $f12, $f12 \n\t" \
-+ "packushb "#reg1", "#reg1", $f12 \n\t" \
-+ store64(reg1,sp)
-+
-+#define store8888r(reg1,sp) \
-+ "xor $f12, $f12, $f12 \n\t" \
-+ "packushb "#reg1", "#reg1", $f12 \n\t" \
-+ store32r(reg1,sp)
-+
-+#define store8888a(reg1,sp) \
-+ "xor $f12, $f12, $f12 \n\t" \
-+ "packushb "#reg1", "#reg1", $f12 \n\t" \
-+ store64a(reg1,sp)
-+
-+#define pack8888(reg1,reg2) \
-+ "packushb $f8, "#reg1","#reg2" \n\t"
-+
-+#define unpack8888(reg1,reg2) \
-+ "punpcklbh $f8, "#reg1","#reg2" \n\t"
-+
-+
-+#define negate(sreg,dreg) \
-+ DMTC1_IMM($f12, 0x00ff00ff00ff00ff)\
-+ "xor "#dreg", "#sreg", $f12 \n\t"
-+
-+#define pix_add(reg1,reg2) \
-+ "paddusb $f8, "#reg1", "#reg2" \n\t"
-+
-+#define pix_multiply(reg1,reg2) \
-+ "pmullh $f14, "#reg1", "#reg2" \n\t " \
-+ DMTC1_IMM($f12, 0x0080008000800080) \
-+ "paddush $f14, $f14, $f12 \n\t "\
-+ MTC1_IMM($f12, 8) \
-+ "psrlh $f16, $f14, $f12 \n\t" \
-+ "paddush $f14, $f14, $f16 \n\t" \
-+ "psrlh $f8, $f14, $f12 \n\t"
-+
-+#define pix_add_mul(reg1,reg2,reg3,reg4) \
-+ pix_multiply(reg1,reg2) \
-+ "mov.d $f18, $f8 \n\t" \
-+ pix_multiply(reg3,reg4) \
-+ pix_add($f18,$f8)
-+
-+#define expand_alpha(sreg,dreg) \
-+ "dmfc1 $8, "#sreg" \n\t" \
-+ "dsrl32 $8, $8, 16 \n\t" \
-+ "dsll $9, $8, 16 \n\t" \
-+ "or $8, $8, $9 \n\t" \
-+ "dsll32 $9, $8, 0 \n\t" \
-+ "or $8, $8, $9 \n\t" \
-+ "dmtc1 $8, "#dreg" \n\t"
-+
-+#define expand_alpha_rev(sreg,dreg)\
-+ "dmfc1 $8, "#sreg" \n\t" \
-+ "dsll32 $8, $8, 16 \n\t" \
-+ "dsrl32 $8, $8, 16 \n\t" \
-+ "dsll $9, $8, 16 \n\t" \
-+ "or $8, $8, $9 \n\t" \
-+ "dsll32 $9, $8, 0 \n\t" \
-+ "or $8, $8, $9 \n\t" \
-+ "dmtc1 $8, "#dreg" \n\t"
-+
-+#define expand8888(reg1,pos) expand8888_##pos(reg1)
-+
-+#define expand8888_0(reg1) \
-+ "xor $f12, $f12, $f12 \n\t" \
-+ "punpcklbh $f8, "#reg1", $f12 \n\t"
-+
-+#define expand8888_1(reg1) \
-+ "xor $f12, $f12, $f12 \n\t" \
-+ "punpckhbh $f8, "#reg1", $f12 \n\t"
-+
-+#define expandx888(reg1,pos) \
-+ expand8888(reg1,pos) \
-+ DMTC1_IMM($f12, 0x00ff000000000000) \
-+ "or $f8, $f8, $f12 \n\t"
-+
-+#define invert_colors(reg1) \
-+ DMTC1_IMM($f12, 0xffff0000ffff0000) \
-+ "and $f14, "#reg1", $f12 \n\t" \
-+ DMTC1_IMM($f12, 0x000000000000ffff) \
-+ "and $f16, "#reg1", $f12 \n\t" \
-+ DMTC1_IMM($f12, 0x0000ffff00000000) \
-+ "and $f18, "#reg1", $f12 \n\t" \
-+ MTC1_IMM($f12, 32) \
-+ "dsll $f16, $f16, $f12 \n\t" \
-+ "dsrl $f18, $f18, $f12 \n\t" \
-+ "or $f14, $f14, $f16 \n\t" \
-+ "or $f8, $f14, $f18 \n\t"
-+
-+#define over(reg1,reg2,reg3) \
-+ negate(reg2,$f8) \
-+ pix_multiply(reg3, $f8)\
-+ pix_add(reg1, $f8)
-+
-+
-+#define over_rev_non_pre(reg1,reg2) \
-+ expand_alpha(reg1,$f0) \
-+ DMTC1_IMM($f12,0x00ff000000000000) \
-+ "or $f2, $f0, $f12 \n\t" \
-+ invert_colors(reg1) \
-+ pix_multiply($f8,$f2) \
-+ save_to($f2) \
-+ over($f2, $f0, reg2)
-+
-+#define in(reg1,reg2) pix_multiply(reg1,reg2)
-+
-+#define in_over_full_src_alpha(reg1,reg2,reg3) \
-+ DMTC1_IMM($f12,0x00ff000000000000) \
-+ "or $f0, "#reg1", $f12 \n\t" \
-+ in($f0,reg2) \
-+ save_to($f0) \
-+ over($f0,reg2,reg3)
-+
-+#define in_over(reg1,reg2,reg3,reg4) \
-+ in(reg1,reg3) \
-+ "mov.d $f0, $f8 \n\t" \
-+ pix_multiply(reg2,reg3) \
-+ "mov.d $f2, $f8 \n\t" \
-+ over($f0,$f2,reg4)
-+
-+
diff --git a/x11-libs/pixman/pixman-9999.ebuild b/x11-libs/pixman/pixman-9999.ebuild
deleted file mode 100644
index d1c4cc1..0000000
--- a/x11-libs/pixman/pixman-9999.ebuild
+++ /dev/null
@@ -1,50 +0,0 @@
-# Copyright 1999-2009 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Header: $
-
-EAPI=3
-inherit xorg-2 toolchain-funcs versionator
-
-EGIT_REPO_URI="git://anongit.freedesktop.org/git/pixman"
-DESCRIPTION="Low-level pixel manipulation routines"
-
-KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~x86-fbsd"
-IUSE="altivec mmx sse2"
-
-pkg_setup() {
- xorg-2_pkg_setup
- CONFIGURE_OPTIONS="
- $(use_enable altivec vmx)
- --disable-gtk"
-
- local enable_mmx="$(use mmx && echo 1 || echo 0)"
- local enable_sse2="$(use sse2 && echo 1 || echo 0)"
-
- # this block fixes bug #260287
- if use x86; then
- if use sse2 && ! $(version_is_at_least "4.2" "$(gcc-version)"); then
- ewarn "SSE2 instructions require GCC 4.2 or higher."
- ewarn "pixman will be built *without* SSE2 support"
- enable_sse2="0"
- fi
- fi
-
- # this block fixes bug #236558
- case "$enable_mmx,$enable_sse2" in
- '1,1')
- CONFIGURE_OPTIONS="${CONFIGURE_OPTIONS} --enable-mmx --enable-sse2" ;;
- '1,0')
- CONFIGURE_OPTIONS="${CONFIGURE_OPTIONS} --enable-mmx --disable-sse2" ;;
- '0,1')
- ewarn "You enabled SSE2 but have MMX disabled. This is an invalid."
- ewarn "pixman will be built *without* MMX/SSE2 support."
- CONFIGURE_OPTIONS="${CONFIGURE_OPTIONS} --disable-mmx --disable-sse2" ;;
- '0,0')
- CONFIGURE_OPTIONS="${CONFIGURE_OPTIONS} --disable-mmx --disable-sse2" ;;
- esac
-}
-
-src_prepare() {
- epatch "${FILESDIR}/${PN}-loongson2f.patch"
- xorg-2_src_prepare
-}