[Pixman] [PATCH 03/12] MIPS: MIPS32r2: empty MIPS32r2 implementation
Siarhei Siamashka
siarhei.siamashka at gmail.com
Wed Sep 18 11:44:06 PDT 2013
On Mon, 9 Sep 2013 00:52:42 +0200
Nemanja Lukic <nemanja.lukic at rt-rk.com> wrote:
> ---
> configure.ac | 41 +++++++++++++++++++++++++++++++
> pixman/Makefile.am | 14 ++++++++++
> pixman/pixman-mips-common-asm.h | 35 ++++++++++++++++++++++++++
> pixman/pixman-mips-common.h | 35 ++++++++++++++++++++++++++
> pixman/pixman-mips-dspr2-asm.S | 4 +-
> pixman/pixman-mips-dspr2-asm.h | 4 +-
> pixman/pixman-mips-dspr2.c | 4 +-
> pixman/pixman-mips.c | 22 ++++++++++++++--
> pixman/pixman-mips32r2-asm.S | 30 +++++++++++++++++++++++
> pixman/pixman-mips32r2-asm.h | 35 ++++++++++++++++++++++++++
> pixman/pixman-mips32r2.c | 51 +++++++++++++++++++++++++++++++++++++++
> pixman/pixman-private.h | 5 ++++
> 12 files changed, 271 insertions(+), 9 deletions(-)
> create mode 100644 pixman/pixman-mips-common-asm.h
> create mode 100644 pixman/pixman-mips-common.h
> create mode 100644 pixman/pixman-mips32r2-asm.S
> create mode 100644 pixman/pixman-mips32r2-asm.h
> create mode 100644 pixman/pixman-mips32r2.c
>
> diff --git a/configure.ac b/configure.ac
> index 5a773e9..bf92286 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -663,6 +663,47 @@ fi
> AM_CONDITIONAL(USE_ARM_IWMMXT, test $have_iwmmxt_intrinsics = yes)
>
> dnl ==========================================================================
> +dnl Check if assembler is gas compatible and supports MIPS32r2 instructions
> +
> +have_mips32r2=no
> +AC_MSG_CHECKING(whether to use MIPS32r2 assembler)
> +xserver_save_CFLAGS=$CFLAGS
> +CFLAGS="-mips32r2 $CFLAGS"
This does not work as expected.
If I build pixman with CFLAGS="-O2 -march=mips32", then running
configure reports:
checking whether to use MIPS32r2 assembler... no
checking whether to use MIPS DSPr2 assembler... yes
And config.log contains:
configure:13241: checking whether to use MIPS32r2 assembler
configure:13260: mipsel-unknown-linux-gnu-gcc -c -mips32r2 -O2 -g -march=mips32 -Wall -fno-strict-aliasing -fvisibility=hidden conftest.c >&5
conftest.c:1:0: error: '-mips32r2' conflicts with the other architecture options, which specify a mips32 processor
configure:13260: $? = 1
The purpose of this check is to ensure that gnu assembler can
accept mips32r2 instructions and successfully compile the
"pixman-mips32r2-asm.S" source file. The CFLAGS provided by
the user should not break it.
> +
> +AC_COMPILE_IFELSE([[
> +int
> +main () {
> + int a = 0, b = 0;
> + __asm__ __volatile__ (
> + "ins %[b], %[a], 14, 14 \n\t"
> + : [b] "=r" (b)
> + : [a] "r" (a)
> + );
> + return b;
> +}]], have_mips32r2=yes)
> +CFLAGS=$xserver_save_CFLAGS
> +
> +AC_ARG_ENABLE(mips32r2,
> + [AC_HELP_STRING([--disable-mips32r2],
> + [disable MIPS32r2 fast paths])],
> + [enable_mips32r2=$enableval], [enable_mips32r2=auto])
> +
> +if test $enable_mips32r2 = no ; then
> + have_mips32r2=disabled
> +fi
> +
> +if test $have_mips32r2 = yes ; then
> + AC_DEFINE(USE_MIPS32R2, 1, [use MIPS32r2 assembly optimizations])
> +fi
> +
> +AM_CONDITIONAL(USE_MIPS32R2, test $have_mips32r2 = yes)
> +
> +AC_MSG_RESULT($have_mips32r2)
> +if test $enable_mips32r2 = yes && test $have_mips32r2 = no ; then
> + AC_MSG_ERROR([MIPS32r2 instructions not detected])
> +fi
> +
> +dnl ==========================================================================
> dnl Check if assembler is gas compatible and supports MIPS DSPr2 instructions
>
> have_mips_dspr2=no
> diff --git a/pixman/Makefile.am b/pixman/Makefile.am
> index b9ea754..15024c6 100644
> --- a/pixman/Makefile.am
> +++ b/pixman/Makefile.am
> @@ -100,6 +100,20 @@ libpixman-iwmmxt.la: libpixman_iwmmxt_la-pixman-mmx.lo $(libpixman_iwmmxt_la_DEP
> $(AM_V_CCLD)$(libpixman_iwmmxt_la_LINK) libpixman_iwmmxt_la-pixman-mmx.lo $(libpixman_iwmmxt_la_LIBADD) $(LIBS)
> endif
>
> +# mips32r2 code
> +if USE_MIPS32R2
> +noinst_LTLIBRARIES += libpixman-mips32r2.la
> +libpixman_mips32r2_la_SOURCES = \
> + pixman-mips32r2.c \
> + pixman-mips-common.h \
> + pixman-mips-common-asm.h \
> + pixman-mips32r2-asm.S \
> + pixman-mips32r2-asm.h
> +libpixman_1_la_LIBADD += libpixman-mips32r2.la
> +
> +ASM_CFLAGS_mips32r2=
> +endif
> +
> # mips dspr2 code
> if USE_MIPS_DSPR2
> noinst_LTLIBRARIES += libpixman-mips-dspr2.la
> diff --git a/pixman/pixman-mips-common-asm.h b/pixman/pixman-mips-common-asm.h
> new file mode 100644
> index 0000000..1e97cc7
> --- /dev/null
> +++ b/pixman/pixman-mips-common-asm.h
> @@ -0,0 +1,35 @@
> +/*
> + * Copyright (c) 2012-2013
> + * MIPS Technologies, Inc., California.
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + * notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + * notice, this list of conditions and the following disclaimer in the
> + * documentation and/or other materials provided with the distribution.
> + * 3. Neither the name of the MIPS Technologies, Inc., nor the names of its
> + * contributors may be used to endorse or promote products derived from
> + * this software without specific prior written permission.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
> + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
> + * ARE DISCLAIMED. IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
> + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
> + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
> + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
> + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
> + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> + * SUCH DAMAGE.
> + *
> + * Author: Nemanja Lukic (nemanja.lukic at rt-rk.com)
> + */
> +
> +#ifndef PIXMAN_MIPS_COMMON_ASM_H
> +#define PIXMAN_MIPS_COMMON_ASM_H
> +
> +#endif /* PIXMAN_MIPS_COMMON_ASM_H */
I'm not sure if creating a completely empty file makes much sense in
this patch, but don't have any strong opinion about this.
> diff --git a/pixman/pixman-mips-common.h b/pixman/pixman-mips-common.h
> new file mode 100644
> index 0000000..fc46ed8
> --- /dev/null
> +++ b/pixman/pixman-mips-common.h
> @@ -0,0 +1,35 @@
> +/*
> + * Copyright (c) 2012-2013
> + * MIPS Technologies, Inc., California.
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + * notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + * notice, this list of conditions and the following disclaimer in the
> + * documentation and/or other materials provided with the distribution.
> + * 3. Neither the name of the MIPS Technologies, Inc., nor the names of its
> + * contributors may be used to endorse or promote products derived from
> + * this software without specific prior written permission.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
> + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
> + * ARE DISCLAIMED. IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
> + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
> + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
> + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
> + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
> + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> + * SUCH DAMAGE.
> + *
> + * Author: Nemanja Lukic (nemanja.lukic at rt-rk.com)
> + */
> +
> +#ifndef PIXMAN_MIPS_COMMON_H
> +#define PIXMAN_MIPS_COMMON_H
> +
> +#endif /* PIXMAN_MIPS_COMMON_H */
> diff --git a/pixman/pixman-mips-dspr2-asm.S b/pixman/pixman-mips-dspr2-asm.S
> index 866e93e..15e7fa3 100644
> --- a/pixman/pixman-mips-dspr2-asm.S
> +++ b/pixman/pixman-mips-dspr2-asm.S
> @@ -1,5 +1,5 @@
> /*
> - * Copyright (c) 2012
> + * Copyright (c) 2012-2013
> * MIPS Technologies, Inc., California.
> *
> * Redistribution and use in source and binary forms, with or without
> @@ -26,7 +26,7 @@
> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> * SUCH DAMAGE.
> *
> - * Author: Nemanja Lukic (nlukic at mips.com)
> + * Author: Nemanja Lukic (nemanja.lukic at rt-rk.com)
> */
>
> #include "pixman-private.h"
This update of a MIPS DSPr2 source file seems to be unrelated to
"MIPS: MIPS32r2: empty MIPS32r2 implementation" commit summary.
If you want to update the contact e-mail, then this can be done
in a separate patch.
> diff --git a/pixman/pixman-mips-dspr2-asm.h b/pixman/pixman-mips-dspr2-asm.h
> index cab122d..ec46715 100644
> --- a/pixman/pixman-mips-dspr2-asm.h
> +++ b/pixman/pixman-mips-dspr2-asm.h
> @@ -1,5 +1,5 @@
> /*
> - * Copyright (c) 2012
> + * Copyright (c) 2012-2013
> * MIPS Technologies, Inc., California.
> *
> * Redistribution and use in source and binary forms, with or without
> @@ -26,7 +26,7 @@
> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> * SUCH DAMAGE.
> *
> - * Author: Nemanja Lukic (nlukic at mips.com)
> + * Author: Nemanja Lukic (nemanja.lukic at rt-rk.com)
> */
>
> #ifndef PIXMAN_MIPS_DSPR2_ASM_H
> diff --git a/pixman/pixman-mips-dspr2.c b/pixman/pixman-mips-dspr2.c
> index e10c9df..8e90c97 100644
> --- a/pixman/pixman-mips-dspr2.c
> +++ b/pixman/pixman-mips-dspr2.c
> @@ -1,5 +1,5 @@
> /*
> - * Copyright (c) 2012
> + * Copyright (c) 2012-2013
> * MIPS Technologies, Inc., California.
> *
> * Redistribution and use in source and binary forms, with or without
> @@ -26,7 +26,7 @@
> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> * SUCH DAMAGE.
> *
> - * Author: Nemanja Lukic (nlukic at mips.com)
> + * Author: Nemanja Lukic (nemanja.lukic at rt-rk.com)
> */
>
> #ifdef HAVE_CONFIG_H
> diff --git a/pixman/pixman-mips.c b/pixman/pixman-mips.c
> index 3048813..1a0a8c0 100644
> --- a/pixman/pixman-mips.c
> +++ b/pixman/pixman-mips.c
> @@ -24,12 +24,13 @@
> #endif
>
> #include "pixman-private.h"
> -
> -#if defined(USE_MIPS_DSPR2) || defined(USE_LOONGSON_MMI)
> -
> #include <string.h>
> #include <stdlib.h>
>
> +
> +#if defined(USE_MIPS_DSPR2) || defined(USE_MIPS32R2) || \
> + defined(USE_LOONGSON_MMI)
> +
> static pixman_bool_t
> have_feature (const char *search_string)
> {
> @@ -74,6 +75,21 @@ _pixman_mips_get_implementations (pixman_implementation_t *imp)
> imp = _pixman_implementation_create_mmx (imp);
> #endif
>
> +#ifdef USE_MIPS32R2
> + if (!_pixman_disabled ("mips32r2"))
> + {
> + int already_compiling_everything_for_mips32r2 = 0;
> +#if defined(__mips__) && (__mips_isa_rev >= 2)
> + already_compiling_everything_for_mips32r2 = 1;
> +#endif
> + if (already_compiling_everything_for_mips32r2 ||
> + have_feature ("MIPS 74K"))
Implementing the runtime detection first to actually detect
the real mips32r2 processors would be a bit more logical than
just checking for all the same single MIPS 74K core. You have this
better runtime detection code later in the patch set. Just the
order of the patches seems reversed.
> + {
> + imp = _pixman_implementation_create_mips32r2 (imp);
> + }
> + }
> +#endif
> +
> #ifdef USE_MIPS_DSPR2
> if (!_pixman_disabled ("mips-dspr2"))
> {
> diff --git a/pixman/pixman-mips32r2-asm.S b/pixman/pixman-mips32r2-asm.S
> new file mode 100644
> index 0000000..468937c
> --- /dev/null
> +++ b/pixman/pixman-mips32r2-asm.S
> @@ -0,0 +1,30 @@
> +/*
> + * Copyright (c) 2012-2013
> + * MIPS Technologies, Inc., California.
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + * notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + * notice, this list of conditions and the following disclaimer in the
> + * documentation and/or other materials provided with the distribution.
> + * 3. Neither the name of the MIPS Technologies, Inc., nor the names of its
> + * contributors may be used to endorse or promote products derived from
> + * this software without specific prior written permission.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
> + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
> + * ARE DISCLAIMED. IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
> + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
> + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
> + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
> + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
> + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> + * SUCH DAMAGE.
> + */
> +
> +#include "pixman-mips32r2-asm.h"
> diff --git a/pixman/pixman-mips32r2-asm.h b/pixman/pixman-mips32r2-asm.h
> new file mode 100644
> index 0000000..b8f1773
> --- /dev/null
> +++ b/pixman/pixman-mips32r2-asm.h
> @@ -0,0 +1,35 @@
> +/*
> + * Copyright (c) 2012-2013
> + * MIPS Technologies, Inc., California.
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + * notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + * notice, this list of conditions and the following disclaimer in the
> + * documentation and/or other materials provided with the distribution.
> + * 3. Neither the name of the MIPS Technologies, Inc., nor the names of its
> + * contributors may be used to endorse or promote products derived from
> + * this software without specific prior written permission.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
> + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
> + * ARE DISCLAIMED. IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
> + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
> + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
> + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
> + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
> + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> + * SUCH DAMAGE.
> + *
> + * Author: Nemanja Lukic (nemanja.lukic at rt-rk.com)
> + */
> +
> +#ifndef PIXMAN_MIPS32R2_ASM_H
> +#define PIXMAN_MIPS32R2_ASM_H
> +
> +#endif /* PIXMAN_MIPS32R2_ASM_H */
> diff --git a/pixman/pixman-mips32r2.c b/pixman/pixman-mips32r2.c
> new file mode 100644
> index 0000000..f3500bc
> --- /dev/null
> +++ b/pixman/pixman-mips32r2.c
> @@ -0,0 +1,51 @@
> +/*
> + * Copyright (c) 2012-2013
> + * MIPS Technologies, Inc., California.
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + * notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + * notice, this list of conditions and the following disclaimer in the
> + * documentation and/or other materials provided with the distribution.
> + * 3. Neither the name of the MIPS Technologies, Inc., nor the names of its
> + * contributors may be used to endorse or promote products derived from
> + * this software without specific prior written permission.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
> + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
> + * ARE DISCLAIMED. IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
> + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
> + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
> + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
> + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
> + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> + * SUCH DAMAGE.
> + *
> + * Author: Nemanja Lukic (nemanja.lukic at rt-rk.com)
> + */
> +
> +#ifdef HAVE_CONFIG_H
> +#include <config.h>
> +#endif
> +
> +#include "pixman-private.h"
> +#include "pixman-mips-common.h"
> +
> +static const pixman_fast_path_t mips32r2_fast_paths[] =
> +{
> + { PIXMAN_OP_NONE },
> +};
> +
> +pixman_implementation_t *
> +_pixman_implementation_create_mips32r2 (pixman_implementation_t *fallback)
> +{
> + pixman_implementation_t *imp =
> + _pixman_implementation_create (fallback, mips32r2_fast_paths);
> +
> + return imp;
> +}
> diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
> index 9646605..1aacb8d 100644
> --- a/pixman/pixman-private.h
> +++ b/pixman/pixman-private.h
> @@ -608,6 +608,11 @@ pixman_implementation_t *
> _pixman_implementation_create_mips_dspr2 (pixman_implementation_t *fallback);
> #endif
>
> +#ifdef USE_MIPS32R2
> +pixman_implementation_t *
> +_pixman_implementation_create_mips32r2 (pixman_implementation_t *fallback);
> +#endif
> +
> #ifdef USE_VMX
> pixman_implementation_t *
> _pixman_implementation_create_vmx (pixman_implementation_t *fallback);
--
Best regards,
Siarhei Siamashka
More information about the Pixman
mailing list