[Pixman] [PATCH 2/2] Add support for MIPS MSA.

Shiyou Yin yinshiyou-hf at loongson.cn
Fri Mar 27 07:30:33 UTC 2020


From: Yin Shiyou <yinshiyou-hf at loongson.cn>

 

This patch only add a framework for MSA.

Detail optimizations will be submited in seprate patchs.

---

configure.ac             | 53 ++++++++++++++++++++++++++++++++++++++++++++++++

pixman/Makefile.am       |  9 ++++++++

pixman/pixman-mips-msa.c | 44 ++++++++++++++++++++++++++++++++++++++++

pixman/pixman-mips.c     |  9 +++++++-

pixman/pixman-private.h  |  5 +++++

5 files changed, 119 insertions(+), 1 deletion(-)  create mode 100644 pixman/pixman-mips-msa.c

 

diff --git a/configure.ac b/configure.ac index fd7df47..dffc83b 100644

--- a/configure.ac

+++ b/configure.ac

@@ -323,6 +323,57 @@ fi

AM_CONDITIONAL(USE_LOONGSON_MMI, test $have_loongson_mmi = yes)

 dnl ===========================================================================

+dnl Check for MIPS SIMD Architecture(MSA)

+

+if test "x$MSA_CFLAGS" = "x" ; then

+    MSA_CFLAGS="-mmsa"

+fi

+

+have_mips_msa=no

+AC_MSG_CHECKING(whether to use MSA intrinsics)

+

+xserver_save_CFLAGS=$CFLAGS

+CFLAGS=" $MSA_CFLAGS $CFLAGS -I$srcdir"

+AC_LINK_IFELSE([AC_LANG_SOURCE([[

+#if !(defined(__mips__) &&  __mips_isa_rev >= 2) #error "MIPS SIMD 

+Architecture are only available on MIPS"

+#endif

+#if defined(__GNUC__) && (__GNUC__ < 7 ) #error "Need GCC >= 7 for MSA 

+compilation"

+#endif

+#include <msa.h>

+int

+main ()

+{

+    v16i8 a = {0}, b = {0};

+    a = __msa_addvi_b(b,1);

+    return 0;

+}]])], have_mips_msa=yes)

+CFLAGS=$xserver_save_CFLAGS

+

+AC_ARG_ENABLE(mips-msa,

+   [AC_HELP_STRING([--disable-mips-msa],

+                   [disable Mips MSA fast paths])],

+   [enable_mips_msa=$enableval], [enable_mips_msa=auto])

+

+if test $enable_mips_msa = no ; then

+   have_mips_msa=disabled

+fi

+

+if test $have_mips_msa = yes ; then

+   AC_DEFINE(USE_MIPS_MSA, 1, [use MIPS SIMD Architecture]) else

+   MSA_CFLAGS=

+fi

+

+AC_MSG_RESULT($have_mips_msa)

+if test $enable_mips_msa = yes && test $have_mips_msa = no ; then

+   AC_MSG_ERROR([Mips MSA not detected]) fi

+

+AM_CONDITIONAL(USE_MIPS_MSA, test $have_mips_msa = yes)

+

+dnl 

+=======================================================================

+====

dnl Check for MMX

 if test "x$MMX_CFLAGS" = "x" ; then

@@ -532,6 +583,8 @@ case $host_os in

esac

 AC_SUBST(LS_CFLAGS)

+AC_SUBST(MSA_CFLAGS)

+AC_SUBST(MSA_LDFLAGS)

AC_SUBST(IWMMXT_CFLAGS)

AC_SUBST(MMX_CFLAGS)

AC_SUBST(MMX_LDFLAGS)

diff --git a/pixman/Makefile.am b/pixman/Makefile.am index 3de2615..8af1de5 100644

--- a/pixman/Makefile.am

+++ b/pixman/Makefile.am

@@ -129,6 +129,15 @@ libpixman_1_la_LIBADD += libpixman-mips-dspr2.la  ASM_CFLAGS_mips_dspr2=  endif

+# mips msa code

+if USE_MIPS_MSA

+noinst_LTLIBRARIES += libpixman-mips-msa.la 

+libpixman_mips_msa_la_SOURCES = pixman-mips-msa.c 

+libpixman_mips_msa_la_CFLAGS = $(MSA_CFLAGS) libpixman_1_la_LDFLAGS += 

+$(MSA_LDFLAGS) libpixman_1_la_LIBADD += libpixman-mips-msa.la endif

+

# loongson code

if USE_LOONGSON_MMI

noinst_LTLIBRARIES += libpixman-loongson-mmi.la diff --git a/pixman/pixman-mips-msa.c
b/pixman/pixman-mips-msa.c new file mode 100644 index 0000000..10b731a

--- /dev/null

+++ b/pixman/pixman-mips-msa.c

@@ -0,0 +1,44 @@

+/*

+ * Copyright C 2019 Loongson Technology Co. Ltd.

+ * Contributed by Yin Shiyou(yinshiyou-hf at loongson.cn)

+ *

+ * Permission to use, copy, modify, distribute, and sell this software 

+and its

+ * documentation for any purpose is hereby granted without fee, 

+provided that

+ * the above copyright notice appear in all copies and that both that

+ * copyright notice and this permission notice appear in supporting

+ * documentation, and that the name of Red Hat not be used in 

+advertising or

+ * publicity pertaining to distribution of the software without 

+specific,

+ * written prior permission.  Red Hat makes no representations about 

+the

+ * suitability of this software for any purpose.  It is provided "as is"

+ * without express or implied warranty.

+ *

+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS

+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND

+ * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY

+ * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES

+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN

+ * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING

+ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS

+ * SOFTWARE.

+ *

+ */

+#ifdef HAVE_CONFIG_H

+#include <config.h>

+#endif

+

+#include <msa.h>

+#include "pixman-private.h"

+

+static const pixman_fast_path_t msa_fast_paths[] = {

+    { PIXMAN_OP_NONE },

+};

+

+pixman_implementation_t *

+_pixman_implementation_create_msa (pixman_implementation_t *fallback) {

+    pixman_implementation_t *imp =

+        _pixman_implementation_create (fallback, msa_fast_paths);

+

+    return imp;

+}

diff --git a/pixman/pixman-mips.c b/pixman/pixman-mips.c index 3048813..f3c3142 100644

--- a/pixman/pixman-mips.c

+++ b/pixman/pixman-mips.c

@@ -25,7 +25,7 @@

 #include "pixman-private.h"

-#if defined(USE_MIPS_DSPR2) || defined(USE_LOONGSON_MMI)

+#if defined(USE_MIPS_DSPR2) || defined(USE_LOONGSON_MMI) || 

+defined(USE_MIPS_MSA)

 #include <string.h>

#include <stdlib.h>

@@ -74,6 +74,13 @@ _pixman_mips_get_implementations (pixman_implementation_t *imp)

       imp = _pixman_implementation_create_mmx (imp);  #endif

+#ifdef USE_MIPS_MSA

+    if (!_pixman_disabled ("mips-msa") && have_feature ("msa"))

+    {

+        imp = _pixman_implementation_create_msa (imp);

+    }

+#endif

+

#ifdef USE_MIPS_DSPR2

     if (!_pixman_disabled ("mips-dspr2"))

     {

diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h index d836cc5..f82ae61 100644

--- a/pixman/pixman-private.h

+++ b/pixman/pixman-private.h

@@ -620,6 +620,11 @@ pixman_implementation_t *  _pixman_implementation_create_mmx
(pixman_implementation_t *fallback);  #endif

+#if USE_MIPS_MSA

+pixman_implementation_t *

+_pixman_implementation_create_msa (pixman_implementation_t *fallback); 

+#endif

+

#ifdef USE_SSE2

pixman_implementation_t *

_pixman_implementation_create_sse2 (pixman_implementation_t *fallback);

--

2.1.0

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/pixman/attachments/20200327/465cf845/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0002-Add-support-for-MIPS-MSA.patch
Type: application/octet-stream
Size: 6257 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/pixman/attachments/20200327/465cf845/attachment-0001.obj>


More information about the Pixman mailing list