[Pixman] [PATCH 2/2] Add support for MIPS MSA.
YunQiang Su
wzssyqa at gmail.com
Sat Mar 28 15:32:01 UTC 2020
Shiyou Yin <yinshiyou-hf at loongson.cn> 于2020年3月27日周五 上午9:42写道:
>
> From: Yin Shiyou <yinshiyou-hf at loongson.cn>
>
> This patch only add a framework for MSA.
> Detail optimizations will be submited in seprate patchs.
They should be in a same patchset.
> ---
> 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 © 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
>
> _______________________________________________
> Pixman mailing list
> Pixman at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/pixman
--
YunQiang Su
More information about the Pixman
mailing list