diff options
Diffstat (limited to 'pixman')
-rw-r--r-- | pixman/Makefile.in | 1 | ||||
-rw-r--r-- | pixman/config.h.in | 2 | ||||
-rw-r--r-- | pixman/configure | 117 | ||||
-rw-r--r-- | pixman/configure.ac | 58 | ||||
-rw-r--r-- | pixman/pixman/Makefile.am | 9 | ||||
-rw-r--r-- | pixman/pixman/Makefile.in | 20 | ||||
-rw-r--r-- | pixman/pixman/pixman-arm-common.h | 273 | ||||
-rw-r--r-- | pixman/pixman/pixman-arm-neon-asm.S | 16 | ||||
-rw-r--r-- | pixman/pixman/pixman-arm-neon.c | 304 | ||||
-rw-r--r-- | pixman/pixman/pixman-arm-simd-asm.S | 330 | ||||
-rw-r--r-- | pixman/pixman/pixman-arm-simd.c | 171 | ||||
-rw-r--r-- | pixman/pixman/pixman-version.h | 6 | ||||
-rw-r--r-- | pixman/test/Makefile.in | 1 | ||||
-rw-r--r-- | pixman/test/window-test.c | 4 |
14 files changed, 841 insertions, 471 deletions
diff --git a/pixman/Makefile.in b/pixman/Makefile.in index 30a157a72..41fe19b57 100644 --- a/pixman/Makefile.in +++ b/pixman/Makefile.in @@ -137,7 +137,6 @@ ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ -ARM_SIMD_CFLAGS = @ARM_SIMD_CFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ diff --git a/pixman/config.h.in b/pixman/config.h.in index 945735d1b..de9052dbf 100644 --- a/pixman/config.h.in +++ b/pixman/config.h.in @@ -82,7 +82,7 @@ /* use ARM NEON assembly optimizations */ #undef USE_ARM_NEON -/* use ARM SIMD compiler intrinsics */ +/* use ARM SIMD assembly optimizations */ #undef USE_ARM_SIMD /* use GNU-style inline assembler */ diff --git a/pixman/configure b/pixman/configure index 82da71bb1..ffba51473 100644 --- a/pixman/configure +++ b/pixman/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.65 for pixman 0.17.12. +# Generated by GNU Autoconf 2.65 for pixman 0.18.0. # # Report bugs to <"pixman@lists.freedesktop.org">. # @@ -701,8 +701,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='pixman' PACKAGE_TARNAME='pixman' -PACKAGE_VERSION='0.17.12' -PACKAGE_STRING='pixman 0.17.12' +PACKAGE_VERSION='0.18.0' +PACKAGE_STRING='pixman 0.18.0' PACKAGE_BUGREPORT='"pixman@lists.freedesktop.org"' PACKAGE_URL='' @@ -763,7 +763,6 @@ USE_ARM_NEON_FALSE USE_ARM_NEON_TRUE USE_ARM_SIMD_FALSE USE_ARM_SIMD_TRUE -ARM_SIMD_CFLAGS USE_VMX_FALSE USE_VMX_TRUE VMX_CFLAGS @@ -1467,7 +1466,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures pixman 0.17.12 to adapt to many kinds of systems. +\`configure' configures pixman 0.18.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1537,7 +1536,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of pixman 0.17.12:";; + short | recursive ) echo "Configuration of pixman 0.18.0:";; esac cat <<\_ACEOF @@ -1652,7 +1651,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -pixman configure 0.17.12 +pixman configure 0.18.0 generated by GNU Autoconf 2.65 Copyright (C) 2009 Free Software Foundation, Inc. @@ -2147,7 +2146,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by pixman $as_me 0.17.12, which was +It was created by pixman $as_me 0.18.0, which was generated by GNU Autoconf 2.65. Invocation command line was $ $0 $@ @@ -2955,7 +2954,7 @@ fi # Define the identity of the package. PACKAGE='pixman' - VERSION='0.17.12' + VERSION='0.18.0' cat >>confdefs.h <<_ACEOF @@ -4808,13 +4807,13 @@ if test "${lt_cv_nm_interface+set}" = set; then : else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:4811: $ac_compile\"" >&5) + (eval echo "\"\$as_me:4810: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 - (eval echo "\"\$as_me:4814: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval echo "\"\$as_me:4813: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 - (eval echo "\"\$as_me:4817: output\"" >&5) + (eval echo "\"\$as_me:4816: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" @@ -6020,7 +6019,7 @@ ia64-*-hpux*) ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 6023 "configure"' > conftest.$ac_ext + echo '#line 6022 "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -7546,11 +7545,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7549: $lt_compile\"" >&5) + (eval echo "\"\$as_me:7548: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:7553: \$? = $ac_status" >&5 + echo "$as_me:7552: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -7885,11 +7884,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7888: $lt_compile\"" >&5) + (eval echo "\"\$as_me:7887: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:7892: \$? = $ac_status" >&5 + echo "$as_me:7891: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -7990,11 +7989,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7993: $lt_compile\"" >&5) + (eval echo "\"\$as_me:7992: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:7997: \$? = $ac_status" >&5 + echo "$as_me:7996: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -8045,11 +8044,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:8048: $lt_compile\"" >&5) + (eval echo "\"\$as_me:8047: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:8052: \$? = $ac_status" >&5 + echo "$as_me:8051: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -10415,7 +10414,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 10418 "configure" +#line 10417 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -10511,7 +10510,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 10514 "configure" +#line 10513 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11087,13 +11086,13 @@ fi -LT_VERSION_INFO="17:12:17" +LT_VERSION_INFO="18:0:18" PIXMAN_VERSION_MAJOR=0 -PIXMAN_VERSION_MINOR=17 +PIXMAN_VERSION_MINOR=18 -PIXMAN_VERSION_MICRO=12 +PIXMAN_VERSION_MICRO=0 @@ -11464,44 +11463,30 @@ else fi -ARM_SIMD_CFLAGS="" - have_arm_simd=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use ARM SIMD assembler" >&5 $as_echo_n "checking whether to use ARM SIMD assembler... " >&6; } -# check with default CFLAGS in case the toolchain turns on a sufficiently recent -mcpu= +xserver_save_CFLAGS=$CFLAGS +CFLAGS="-x assembler-with-cpp $CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -int main () { - asm("uqadd8 r1, r1, r2"); - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - have_arm_simd=yes -else - # check again with an explicit -mcpu= in case the toolchain defaults to an - # older one; note that uqadd8 isn't available in Thumb mode on arm1136j-s - # so we force ARM mode - ARM_SIMD_CFLAGS="-mcpu=arm1136j-s -marm" - xserver_save_CFLAGS=$CFLAGS - CFLAGS="$ARM_SIMD_CFLAGS $CFLAGS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - int main () { - asm("uqadd8 r1, r1, r2"); - return 0; - } +.text +.arch armv6 +.object_arch armv4 +.arm +.altmacro +#ifndef __ARM_EABI__ +#error EABI is required (to be sure that calling conventions are compatible) +#endif +pld [r0] +uqadd8 r0, r0, r0 _ACEOF if ac_fn_c_try_compile "$LINENO"; then : have_arm_simd=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$xserver_save_CFLAGS -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +CFLAGS=$xserver_save_CFLAGS # Check whether --enable-arm-simd was given. if test "${enable_arm_simd+set}" = set; then : @@ -11519,18 +11504,8 @@ if test $have_arm_simd = yes ; then $as_echo "#define USE_ARM_SIMD 1" >>confdefs.h -else - ARM_SIMD_CFLAGS= -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_arm_simd" >&5 -$as_echo "$have_arm_simd" >&6; } -if test $enable_arm_simd = yes && test $have_arm_simd = no ; then - as_fn_error "ARM SIMD intrinsics not detected" "$LINENO" 5 fi - - if test $have_arm_simd = yes; then USE_ARM_SIMD_TRUE= USE_ARM_SIMD_FALSE='#' @@ -11540,16 +11515,26 @@ else fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_arm_simd" >&5 +$as_echo "$have_arm_simd" >&6; } +if test $enable_arm_simd = yes && test $have_arm_simd = no ; then + as_fn_error "ARM SIMD intrinsics not detected" "$LINENO" 5 +fi + have_arm_neon=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use ARM NEON assembler" >&5 $as_echo_n "checking whether to use ARM NEON assembler... " >&6; } xserver_save_CFLAGS=$CFLAGS -CFLAGS="-x assembler-with-cpp" +CFLAGS="-x assembler-with-cpp $CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ .text .fpu neon +.arch armv7a +.object_arch armv4 +.eabi_attribute 10, 0 +.arm .altmacro #ifndef __ARM_EABI__ #error EABI is required (to be sure that calling conventions are compatible) @@ -12573,7 +12558,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by pixman $as_me 0.17.12, which was +This file was extended by pixman $as_me 0.18.0, which was generated by GNU Autoconf 2.65. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -12639,7 +12624,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -pixman config.status 0.17.12 +pixman config.status 0.18.0 configured by $0, generated by GNU Autoconf 2.65, with options \\"\$ac_cs_config\\" diff --git a/pixman/configure.ac b/pixman/configure.ac index dc820b423..d13b6e6f9 100644 --- a/pixman/configure.ac +++ b/pixman/configure.ac @@ -53,8 +53,8 @@ AC_PREREQ([2.57]) # m4_define([pixman_major], 0) -m4_define([pixman_minor], 17) -m4_define([pixman_micro], 12) +m4_define([pixman_minor], 18) +m4_define([pixman_micro], 0) m4_define([pixman_version],[pixman_major.pixman_minor.pixman_micro]) @@ -361,30 +361,24 @@ AC_SUBST(VMX_CFLAGS) AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes) -dnl =========================================================================== -dnl Check for ARM SIMD instructions -ARM_SIMD_CFLAGS="" - +dnl ========================================================================== +dnl Check if assembler is gas compatible and supports ARM SIMD instructions have_arm_simd=no AC_MSG_CHECKING(whether to use ARM SIMD assembler) -# check with default CFLAGS in case the toolchain turns on a sufficiently recent -mcpu= -AC_COMPILE_IFELSE([ -int main () { - asm("uqadd8 r1, r1, r2"); - return 0; -}], have_arm_simd=yes, - # check again with an explicit -mcpu= in case the toolchain defaults to an - # older one; note that uqadd8 isn't available in Thumb mode on arm1136j-s - # so we force ARM mode - ARM_SIMD_CFLAGS="-mcpu=arm1136j-s -marm" - xserver_save_CFLAGS=$CFLAGS - CFLAGS="$ARM_SIMD_CFLAGS $CFLAGS" - AC_COMPILE_IFELSE([ - int main () { - asm("uqadd8 r1, r1, r2"); - return 0; - }], have_arm_simd=yes) - CFLAGS=$xserver_save_CFLAGS) +xserver_save_CFLAGS=$CFLAGS +CFLAGS="-x assembler-with-cpp $CFLAGS" +AC_COMPILE_IFELSE([[ +.text +.arch armv6 +.object_arch armv4 +.arm +.altmacro +#ifndef __ARM_EABI__ +#error EABI is required (to be sure that calling conventions are compatible) +#endif +pld [r0] +uqadd8 r0, r0, r0]], have_arm_simd=yes) +CFLAGS=$xserver_save_CFLAGS AC_ARG_ENABLE(arm-simd, [AC_HELP_STRING([--disable-arm-simd], @@ -396,29 +390,29 @@ if test $enable_arm_simd = no ; then fi if test $have_arm_simd = yes ; then - AC_DEFINE(USE_ARM_SIMD, 1, [use ARM SIMD compiler intrinsics]) -else - ARM_SIMD_CFLAGS= + AC_DEFINE(USE_ARM_SIMD, 1, [use ARM SIMD assembly optimizations]) fi +AM_CONDITIONAL(USE_ARM_SIMD, test $have_arm_simd = yes) + AC_MSG_RESULT($have_arm_simd) if test $enable_arm_simd = yes && test $have_arm_simd = no ; then AC_MSG_ERROR([ARM SIMD intrinsics not detected]) fi -AC_SUBST(ARM_SIMD_CFLAGS) - -AM_CONDITIONAL(USE_ARM_SIMD, test $have_arm_simd = yes) - dnl ========================================================================== dnl Check if assembler is gas compatible and supports NEON instructions have_arm_neon=no AC_MSG_CHECKING(whether to use ARM NEON assembler) xserver_save_CFLAGS=$CFLAGS -CFLAGS="-x assembler-with-cpp" +CFLAGS="-x assembler-with-cpp $CFLAGS" AC_COMPILE_IFELSE([[ .text .fpu neon +.arch armv7a +.object_arch armv4 +.eabi_attribute 10, 0 +.arm .altmacro #ifndef __ARM_EABI__ #error EABI is required (to be sure that calling conventions are compatible) diff --git a/pixman/pixman/Makefile.am b/pixman/pixman/Makefile.am index 5a0e7a951..66ad7f005 100644 --- a/pixman/pixman/Makefile.am +++ b/pixman/pixman/Makefile.am @@ -97,12 +97,14 @@ endif if USE_ARM_SIMD noinst_LTLIBRARIES += libpixman-arm-simd.la libpixman_arm_simd_la_SOURCES = \ - pixman-arm-simd.c -libpixman_arm_simd_la_CFLAGS = $(DEP_CFLAGS) $(ARM_SIMD_CFLAGS) + pixman-arm-simd.c \ + pixman-arm-common.h \ + pixman-arm-simd-asm.S +libpixman_arm_simd_la_CFLAGS = $(DEP_CFLAGS) libpixman_arm_simd_la_LIBADD = $(DEP_LIBS) libpixman_1_la_LIBADD += libpixman-arm-simd.la -ASM_CFLAGS_arm_simd=$(ARM_SIMD_CFLAGS) +ASM_CFLAGS_arm_simd= endif # arm neon code @@ -110,6 +112,7 @@ if USE_ARM_NEON noinst_LTLIBRARIES += libpixman-arm-neon.la libpixman_arm_neon_la_SOURCES = \ pixman-arm-neon.c \ + pixman-arm-common.h \ pixman-arm-neon-asm.S \ pixman-arm-neon-asm.h libpixman_arm_neon_la_CFLAGS = $(DEP_CFLAGS) diff --git a/pixman/pixman/Makefile.in b/pixman/pixman/Makefile.in index 0f57d91a3..6519db85d 100644 --- a/pixman/pixman/Makefile.in +++ b/pixman/pixman/Makefile.in @@ -116,7 +116,8 @@ am__DEPENDENCIES_1 = @USE_ARM_NEON_TRUE@libpixman_arm_neon_la_DEPENDENCIES = \ @USE_ARM_NEON_TRUE@ $(am__DEPENDENCIES_1) am__libpixman_arm_neon_la_SOURCES_DIST = pixman-arm-neon.c \ - pixman-arm-neon-asm.S pixman-arm-neon-asm.h + pixman-arm-common.h pixman-arm-neon-asm.S \ + pixman-arm-neon-asm.h @USE_ARM_NEON_TRUE@am_libpixman_arm_neon_la_OBJECTS = \ @USE_ARM_NEON_TRUE@ libpixman_arm_neon_la-pixman-arm-neon.lo \ @USE_ARM_NEON_TRUE@ pixman-arm-neon-asm.lo @@ -128,9 +129,11 @@ libpixman_arm_neon_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ @USE_ARM_NEON_TRUE@am_libpixman_arm_neon_la_rpath = @USE_ARM_SIMD_TRUE@libpixman_arm_simd_la_DEPENDENCIES = \ @USE_ARM_SIMD_TRUE@ $(am__DEPENDENCIES_1) -am__libpixman_arm_simd_la_SOURCES_DIST = pixman-arm-simd.c +am__libpixman_arm_simd_la_SOURCES_DIST = pixman-arm-simd.c \ + pixman-arm-common.h pixman-arm-simd-asm.S @USE_ARM_SIMD_TRUE@am_libpixman_arm_simd_la_OBJECTS = \ -@USE_ARM_SIMD_TRUE@ libpixman_arm_simd_la-pixman-arm-simd.lo +@USE_ARM_SIMD_TRUE@ libpixman_arm_simd_la-pixman-arm-simd.lo \ +@USE_ARM_SIMD_TRUE@ pixman-arm-simd-asm.lo libpixman_arm_simd_la_OBJECTS = $(am_libpixman_arm_simd_la_OBJECTS) libpixman_arm_simd_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ @@ -219,7 +222,6 @@ ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ -ARM_SIMD_CFLAGS = @ARM_SIMD_CFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -418,13 +420,16 @@ CLEANFILES = pixman-combine32.c pixman-combine64.c pixman-combine32.h pixman-com @USE_SSE2_TRUE@libpixman_sse2_la_LIBADD = $(DEP_LIBS) @USE_SSE2_TRUE@ASM_CFLAGS_sse2 = $(SSE2_CFLAGS) @USE_ARM_SIMD_TRUE@libpixman_arm_simd_la_SOURCES = \ -@USE_ARM_SIMD_TRUE@ pixman-arm-simd.c +@USE_ARM_SIMD_TRUE@ pixman-arm-simd.c \ +@USE_ARM_SIMD_TRUE@ pixman-arm-common.h \ +@USE_ARM_SIMD_TRUE@ pixman-arm-simd-asm.S -@USE_ARM_SIMD_TRUE@libpixman_arm_simd_la_CFLAGS = $(DEP_CFLAGS) $(ARM_SIMD_CFLAGS) +@USE_ARM_SIMD_TRUE@libpixman_arm_simd_la_CFLAGS = $(DEP_CFLAGS) @USE_ARM_SIMD_TRUE@libpixman_arm_simd_la_LIBADD = $(DEP_LIBS) -@USE_ARM_SIMD_TRUE@ASM_CFLAGS_arm_simd = $(ARM_SIMD_CFLAGS) +@USE_ARM_SIMD_TRUE@ASM_CFLAGS_arm_simd = @USE_ARM_NEON_TRUE@libpixman_arm_neon_la_SOURCES = \ @USE_ARM_NEON_TRUE@ pixman-arm-neon.c \ +@USE_ARM_NEON_TRUE@ pixman-arm-common.h \ @USE_ARM_NEON_TRUE@ pixman-arm-neon-asm.S \ @USE_ARM_NEON_TRUE@ pixman-arm-neon-asm.h @@ -535,6 +540,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixman-access-accessors.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixman-access.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixman-arm-neon-asm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixman-arm-simd-asm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixman-bits-image.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixman-combine32.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixman-combine64.Plo@am__quote@ diff --git a/pixman/pixman/pixman-arm-common.h b/pixman/pixman/pixman-arm-common.h new file mode 100644 index 000000000..8d432b1de --- /dev/null +++ b/pixman/pixman/pixman-arm-common.h @@ -0,0 +1,273 @@ +/* + * Copyright © 2010 Nokia Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Author: Siarhei Siamashka (siarhei.siamashka@nokia.com) + */ + +#ifndef PIXMAN_ARM_COMMON_H +#define PIXMAN_ARM_COMMON_H + +/* Define some macros which can expand into proxy functions between + * ARM assembly optimized functions and the rest of pixman fast path API. + * + * All the low level ARM assembly functions have to use ARM EABI + * calling convention and take up to 8 arguments: + * width, height, dst, dst_stride, src, src_stride, mask, mask_stride + * + * The arguments are ordered with the most important coming first (the + * first 4 arguments are passed to function in registers, the rest are + * on stack). The last arguments are optional, for example if the + * function is not using mask, then 'mask' and 'mask_stride' can be + * omitted when doing a function call. + * + * Arguments 'src' and 'mask' contain either a pointer to the top left + * pixel of the composited rectangle or a pixel color value depending + * on the function type. In the case of just a color value (solid source + * or mask), the corresponding stride argument is unused. + */ + +#define PIXMAN_ARM_BIND_FAST_PATH_SRC_DST(cputype, name, \ + src_type, src_cnt, \ + dst_type, dst_cnt) \ +void \ +pixman_composite_##name##_asm_##cputype (int32_t w, \ + int32_t h, \ + dst_type *dst, \ + int32_t dst_stride, \ + src_type *src, \ + int32_t src_stride); \ + \ +static void \ +cputype##_composite_##name (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) \ +{ \ + dst_type *dst_line; \ + src_type *src_line; \ + int32_t dst_stride, src_stride; \ + \ + PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, src_type, \ + src_stride, src_line, src_cnt); \ + PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, dst_type, \ + dst_stride, dst_line, dst_cnt); \ + \ + pixman_composite_##name##_asm_##cputype (width, height, \ + dst_line, dst_stride, \ + src_line, src_stride); \ +} + +#define PIXMAN_ARM_BIND_FAST_PATH_N_DST(cputype, name, \ + dst_type, dst_cnt) \ +void \ +pixman_composite_##name##_asm_##cputype (int32_t w, \ + int32_t h, \ + dst_type *dst, \ + int32_t dst_stride, \ + uint32_t src); \ + \ +static void \ +cputype##_composite_##name (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) \ +{ \ + dst_type *dst_line; \ + int32_t dst_stride; \ + uint32_t src; \ + \ + 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, dst_type, \ + dst_stride, dst_line, dst_cnt); \ + \ + pixman_composite_##name##_asm_##cputype (width, height, \ + dst_line, dst_stride, \ + src); \ +} + +#define PIXMAN_ARM_BIND_FAST_PATH_N_MASK_DST(cputype, name, \ + mask_type, mask_cnt, \ + dst_type, dst_cnt) \ +void \ +pixman_composite_##name##_asm_##cputype (int32_t w, \ + int32_t h, \ + dst_type *dst, \ + int32_t dst_stride, \ + uint32_t src, \ + int32_t unused, \ + mask_type *mask, \ + int32_t mask_stride); \ + \ +static void \ +cputype##_composite_##name (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) \ +{ \ + dst_type *dst_line; \ + mask_type *mask_line; \ + int32_t dst_stride, mask_stride; \ + uint32_t src; \ + \ + 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, dst_type, \ + dst_stride, dst_line, dst_cnt); \ + PIXMAN_IMAGE_GET_LINE (mask_image, mask_x, mask_y, mask_type, \ + mask_stride, mask_line, mask_cnt); \ + \ + pixman_composite_##name##_asm_##cputype (width, height, \ + dst_line, dst_stride, \ + src, 0, \ + mask_line, mask_stride); \ +} + +#define PIXMAN_ARM_BIND_FAST_PATH_SRC_N_DST(cputype, name, \ + src_type, src_cnt, \ + dst_type, dst_cnt) \ +void \ +pixman_composite_##name##_asm_##cputype (int32_t w, \ + int32_t h, \ + dst_type *dst, \ + int32_t dst_stride, \ + src_type *src, \ + int32_t src_stride, \ + uint32_t mask); \ + \ +static void \ +cputype##_composite_##name (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) \ +{ \ + dst_type *dst_line; \ + src_type *src_line; \ + int32_t dst_stride, src_stride; \ + uint32_t mask; \ + \ + mask = _pixman_image_get_solid (mask_image, dst_image->bits.format);\ + \ + if (mask == 0) \ + return; \ + \ + PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, dst_type, \ + dst_stride, dst_line, dst_cnt); \ + PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, src_type, \ + src_stride, src_line, src_cnt); \ + \ + pixman_composite_##name##_asm_##cputype (width, height, \ + dst_line, dst_stride, \ + src_line, src_stride, \ + mask); \ +} + +#define PIXMAN_ARM_BIND_FAST_PATH_SRC_MASK_DST(cputype, name, \ + src_type, src_cnt, \ + mask_type, mask_cnt, \ + dst_type, dst_cnt) \ +void \ +pixman_composite_##name##_asm_##cputype (int32_t w, \ + int32_t h, \ + dst_type *dst, \ + int32_t dst_stride, \ + src_type *src, \ + int32_t src_stride, \ + mask_type *mask, \ + int32_t mask_stride); \ + \ +static void \ +cputype##_composite_##name (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) \ +{ \ + dst_type *dst_line; \ + src_type *src_line; \ + mask_type *mask_line; \ + int32_t dst_stride, src_stride, mask_stride; \ + \ + PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, dst_type, \ + dst_stride, dst_line, dst_cnt); \ + PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, src_type, \ + src_stride, src_line, src_cnt); \ + PIXMAN_IMAGE_GET_LINE (mask_image, mask_x, mask_y, mask_type, \ + mask_stride, mask_line, mask_cnt); \ + \ + pixman_composite_##name##_asm_##cputype (width, height, \ + dst_line, dst_stride, \ + src_line, src_stride, \ + mask_line, mask_stride); \ +} + +#endif diff --git a/pixman/pixman/pixman-arm-neon-asm.S b/pixman/pixman/pixman-arm-neon-asm.S index eb8cc4c96..51bc347bc 100644 --- a/pixman/pixman/pixman-arm-neon-asm.S +++ b/pixman/pixman/pixman-arm-neon-asm.S @@ -42,6 +42,10 @@ .text .fpu neon .arch armv7a + .object_arch armv4 + .eabi_attribute 10, 0 /* suppress Tag_FP_arch */ + .eabi_attribute 12, 0 /* suppress Tag_Advanced_SIMD_arch */ + .arm .altmacro #include "pixman-arm-neon-asm.h" @@ -872,8 +876,8 @@ generate_composite_function \ vsli.u64 d0, d0, #8 vsli.u64 d0, d0, #16 vsli.u64 d0, d0, #32 - vmov d1, d0 - vmov q1, q0 + vorr d1, d0, d0 + vorr q1, q0, q0 .endm .macro pixman_composite_src_n_8_cleanup @@ -911,8 +915,8 @@ generate_composite_function \ vld1.32 {d0[0]}, [DUMMY] vsli.u64 d0, d0, #16 vsli.u64 d0, d0, #32 - vmov d1, d0 - vmov q1, q0 + vorr d1, d0, d0 + vorr q1, q0, q0 .endm .macro pixman_composite_src_n_0565_cleanup @@ -949,8 +953,8 @@ generate_composite_function \ add DUMMY, sp, #ARGS_STACK_OFFSET vld1.32 {d0[0]}, [DUMMY] vsli.u64 d0, d0, #32 - vmov d1, d0 - vmov q1, q0 + vorr d1, d0, d0 + vorr q1, q0, q0 .endm .macro pixman_composite_src_n_8888_cleanup diff --git a/pixman/pixman/pixman-arm-neon.c b/pixman/pixman/pixman-arm-neon.c index 24ceeeb97..6808b3658 100644 --- a/pixman/pixman/pixman-arm-neon.c +++ b/pixman/pixman/pixman-arm-neon.c @@ -32,254 +32,62 @@ #include <string.h> #include "pixman-private.h" - -#define BIND_SRC_NULL_DST(name, src_type, src_cnt, dst_type, dst_cnt) \ -void \ -pixman_composite_##name##_asm_neon (int32_t w, \ - int32_t h, \ - dst_type *dst, \ - int32_t dst_stride, \ - src_type *src, \ - int32_t src_stride); \ - \ -static void \ -neon_composite_##name (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) \ -{ \ - dst_type *dst_line; \ - src_type *src_line; \ - int32_t dst_stride, src_stride; \ - \ - PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, src_type, \ - src_stride, src_line, src_cnt); \ - PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, dst_type, \ - dst_stride, dst_line, dst_cnt); \ - \ - pixman_composite_##name##_asm_neon (width, height, \ - dst_line, dst_stride, \ - src_line, src_stride); \ -} - -#define BIND_N_NULL_DST(name, dst_type, dst_cnt) \ -void \ -pixman_composite_##name##_asm_neon (int32_t w, \ - int32_t h, \ - dst_type *dst, \ - int32_t dst_stride, \ - uint32_t src); \ - \ -static void \ -neon_composite_##name (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) \ -{ \ - dst_type *dst_line; \ - int32_t dst_stride; \ - uint32_t src; \ - \ - 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, dst_type, \ - dst_stride, dst_line, dst_cnt); \ - \ - pixman_composite_##name##_asm_neon (width, height, \ - dst_line, dst_stride, \ - src); \ -} - -#define BIND_N_MASK_DST(name, mask_type, mask_cnt, dst_type, dst_cnt) \ -void \ -pixman_composite_##name##_asm_neon (int32_t w, \ - int32_t h, \ - dst_type *dst, \ - int32_t dst_stride, \ - uint32_t src, \ - int32_t unused, \ - mask_type *mask, \ - int32_t mask_stride); \ - \ -static void \ -neon_composite_##name (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) \ -{ \ - dst_type *dst_line; \ - mask_type *mask_line; \ - int32_t dst_stride, mask_stride; \ - uint32_t src; \ - \ - 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, dst_type, \ - dst_stride, dst_line, dst_cnt); \ - PIXMAN_IMAGE_GET_LINE (mask_image, mask_x, mask_y, mask_type, \ - mask_stride, mask_line, mask_cnt); \ - \ - pixman_composite_##name##_asm_neon (width, height, \ - dst_line, dst_stride, \ - src, 0, \ - mask_line, mask_stride); \ -} - -#define BIND_SRC_N_DST(name, src_type, src_cnt, dst_type, dst_cnt) \ -void \ -pixman_composite_##name##_asm_neon (int32_t w, \ - int32_t h, \ - dst_type *dst, \ - int32_t dst_stride, \ - src_type *src, \ - int32_t src_stride, \ - uint32_t mask); \ - \ -static void \ -neon_composite_##name (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) \ -{ \ - dst_type *dst_line; \ - src_type *src_line; \ - int32_t dst_stride, src_stride; \ - uint32_t mask; \ - \ - mask = _pixman_image_get_solid (mask_image, dst_image->bits.format);\ - \ - if (mask == 0) \ - return; \ - \ - PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, dst_type, \ - dst_stride, dst_line, dst_cnt); \ - PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, src_type, \ - src_stride, src_line, src_cnt); \ - \ - pixman_composite_##name##_asm_neon (width, height, \ - dst_line, dst_stride, \ - src_line, src_stride, \ - mask); \ -} - -#define BIND_SRC_MASK_DST(name, src_type, src_cnt, mask_type, mask_cnt, \ - dst_type, dst_cnt) \ -void \ -pixman_composite_##name##_asm_neon (int32_t w, \ - int32_t h, \ - dst_type *dst, \ - int32_t dst_stride, \ - src_type *src, \ - int32_t src_stride, \ - mask_type *mask, \ - int32_t mask_stride); \ - \ -static void \ -neon_composite_##name (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) \ -{ \ - dst_type *dst_line; \ - src_type *src_line; \ - mask_type *mask_line; \ - int32_t dst_stride, src_stride, mask_stride; \ - \ - PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, dst_type, \ - dst_stride, dst_line, dst_cnt); \ - PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, src_type, \ - src_stride, src_line, src_cnt); \ - PIXMAN_IMAGE_GET_LINE (mask_image, mask_x, mask_y, mask_type, \ - mask_stride, mask_line, mask_cnt); \ - \ - pixman_composite_##name##_asm_neon (width, height, \ - dst_line, dst_stride, \ - src_line, src_stride, \ - mask_line, mask_stride); \ -} - - -BIND_SRC_NULL_DST(src_8888_8888, uint32_t, 1, uint32_t, 1) -BIND_SRC_NULL_DST(src_x888_8888, uint32_t, 1, uint32_t, 1) -BIND_SRC_NULL_DST(src_0565_0565, uint16_t, 1, uint16_t, 1) -BIND_SRC_NULL_DST(src_0888_0888, uint8_t, 3, uint8_t, 3) -BIND_SRC_NULL_DST(src_8888_0565, uint32_t, 1, uint16_t, 1) -BIND_SRC_NULL_DST(src_0565_8888, uint16_t, 1, uint32_t, 1) -BIND_SRC_NULL_DST(src_0888_8888_rev, uint8_t, 3, uint32_t, 1) -BIND_SRC_NULL_DST(src_0888_0565_rev, uint8_t, 3, uint16_t, 1) -BIND_SRC_NULL_DST(src_pixbuf_8888, uint32_t, 1, uint32_t, 1) -BIND_SRC_NULL_DST(add_8000_8000, uint8_t, 1, uint8_t, 1) -BIND_SRC_NULL_DST(add_8888_8888, uint32_t, 1, uint32_t, 1) - -BIND_N_NULL_DST(over_n_0565, uint16_t, 1) -BIND_N_NULL_DST(over_n_8888, uint32_t, 1) -BIND_N_NULL_DST(over_reverse_n_8888, uint32_t, 1) - -BIND_SRC_NULL_DST(over_8888_0565, uint32_t, 1, uint16_t, 1) -BIND_SRC_NULL_DST(over_8888_8888, uint32_t, 1, uint32_t, 1) - -BIND_N_MASK_DST(over_n_8_0565, uint8_t, 1, uint16_t, 1) -BIND_N_MASK_DST(over_n_8_8888, uint8_t, 1, uint32_t, 1) -BIND_N_MASK_DST(over_n_8888_8888_ca, uint32_t, 1, uint32_t, 1) -BIND_N_MASK_DST(add_n_8_8, uint8_t, 1, uint8_t, 1) - -BIND_SRC_N_DST(over_8888_n_8888, uint32_t, 1, uint32_t, 1) - -BIND_SRC_MASK_DST(add_8_8_8, uint8_t, 1, uint8_t, 1, uint8_t, 1) -BIND_SRC_MASK_DST(add_8888_8888_8888, uint32_t, 1, uint32_t, 1, uint32_t, 1) -BIND_SRC_MASK_DST(over_8888_8_8888, uint32_t, 1, uint8_t, 1, uint32_t, 1) -BIND_SRC_MASK_DST(over_8888_8888_8888, uint32_t, 1, uint32_t, 1, uint32_t, 1) +#include "pixman-arm-common.h" + +PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, src_8888_8888, + uint32_t, 1, uint32_t, 1) +PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, src_x888_8888, + uint32_t, 1, uint32_t, 1) +PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, src_0565_0565, + uint16_t, 1, uint16_t, 1) +PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, src_0888_0888, + uint8_t, 3, uint8_t, 3) +PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, src_8888_0565, + uint32_t, 1, uint16_t, 1) +PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, src_0565_8888, + uint16_t, 1, uint32_t, 1) +PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, src_0888_8888_rev, + uint8_t, 3, uint32_t, 1) +PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, src_0888_0565_rev, + uint8_t, 3, uint16_t, 1) +PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, src_pixbuf_8888, + uint32_t, 1, uint32_t, 1) +PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, add_8000_8000, + uint8_t, 1, uint8_t, 1) +PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, add_8888_8888, + uint32_t, 1, uint32_t, 1) +PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, over_8888_0565, + uint32_t, 1, uint16_t, 1) +PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon, over_8888_8888, + uint32_t, 1, uint32_t, 1) + +PIXMAN_ARM_BIND_FAST_PATH_N_DST (neon, over_n_0565, + uint16_t, 1) +PIXMAN_ARM_BIND_FAST_PATH_N_DST (neon, over_n_8888, + uint32_t, 1) +PIXMAN_ARM_BIND_FAST_PATH_N_DST (neon, over_reverse_n_8888, + uint32_t, 1) + +PIXMAN_ARM_BIND_FAST_PATH_N_MASK_DST (neon, over_n_8_0565, + uint8_t, 1, uint16_t, 1) +PIXMAN_ARM_BIND_FAST_PATH_N_MASK_DST (neon, over_n_8_8888, + uint8_t, 1, uint32_t, 1) +PIXMAN_ARM_BIND_FAST_PATH_N_MASK_DST (neon, over_n_8888_8888_ca, + uint32_t, 1, uint32_t, 1) +PIXMAN_ARM_BIND_FAST_PATH_N_MASK_DST (neon, add_n_8_8, + uint8_t, 1, uint8_t, 1) + +PIXMAN_ARM_BIND_FAST_PATH_SRC_N_DST (neon, over_8888_n_8888, + uint32_t, 1, uint32_t, 1) + +PIXMAN_ARM_BIND_FAST_PATH_SRC_MASK_DST (neon, add_8_8_8, + uint8_t, 1, uint8_t, 1, uint8_t, 1) +PIXMAN_ARM_BIND_FAST_PATH_SRC_MASK_DST (neon, add_8888_8888_8888, + uint32_t, 1, uint32_t, 1, uint32_t, 1) +PIXMAN_ARM_BIND_FAST_PATH_SRC_MASK_DST (neon, over_8888_8_8888, + uint32_t, 1, uint8_t, 1, uint32_t, 1) +PIXMAN_ARM_BIND_FAST_PATH_SRC_MASK_DST (neon, over_8888_8888_8888, + uint32_t, 1, uint32_t, 1, uint32_t, 1) void pixman_composite_src_n_8_asm_neon (int32_t w, diff --git a/pixman/pixman/pixman-arm-simd-asm.S b/pixman/pixman/pixman-arm-simd-asm.S new file mode 100644 index 000000000..1a1a0d641 --- /dev/null +++ b/pixman/pixman/pixman-arm-simd-asm.S @@ -0,0 +1,330 @@ +/* + * Copyright © 2008 Mozilla Corporation + * + * 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 Mozilla Corporation not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Mozilla Corporation 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. + * + * Author: Jeff Muizelaar (jeff@infidigm.net) + * + */ + +/* Prevent the stack from becoming executable */ +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif + + .text + .arch armv6 + .object_arch armv4 + .arm + .altmacro + +/* Supplementary macro for setting function attributes */ +.macro pixman_asm_function fname + .func fname + .global fname +#ifdef __ELF__ + .hidden fname + .type fname, %function +#endif +fname: +.endm + +/* + * The code below was generated by gcc 4.3.4 from the commented out + * functions in 'pixman-arm-simd.c' file with the following optimization + * options: "-O3 -mcpu=arm1136jf-s -fomit-frame-pointer" + * + * TODO: replace gcc generated code with hand tuned versions because + * the code quality is not very good, introduce symbolic register + * aliases for better readability and maintainability. + */ + +pixman_asm_function pixman_composite_add_8000_8000_asm_armv6 + push {r4, r5, r6, r7, r8, r9, r10, r11} + mov r10, r1 + sub sp, sp, #4 + subs r10, r10, #1 + mov r11, r0 + mov r8, r2 + str r3, [sp] + ldr r7, [sp, #36] + bcc 0f +6: cmp r11, #0 + beq 1f + orr r3, r8, r7 + tst r3, #3 + beq 2f + mov r1, r8 + mov r0, r7 + mov r12, r11 + b 3f +5: tst r3, #3 + beq 4f +3: ldrb r2, [r0], #1 + subs r12, r12, #1 + ldrb r3, [r1] + uqadd8 r3, r2, r3 + strb r3, [r1], #1 + orr r3, r1, r0 + bne 5b +1: ldr r3, [sp] + add r8, r8, r3 + ldr r3, [sp, #40] + add r7, r7, r3 +10: subs r10, r10, #1 + bcs 6b +0: add sp, sp, #4 + pop {r4, r5, r6, r7, r8, r9, r10, r11} + bx lr +2: mov r12, r11 + mov r1, r8 + mov r0, r7 +4: cmp r12, #3 + subgt r6, r12, #4 + movgt r9, r12 + lsrgt r5, r6, #2 + addgt r3, r5, #1 + movgt r12, #0 + lslgt r4, r3, #2 + ble 7f +8: ldr r3, [r0, r12] + ldr r2, [r1, r12] + uqadd8 r3, r3, r2 + str r3, [r1, r12] + add r12, r12, #4 + cmp r12, r4 + bne 8b + sub r3, r9, #4 + bic r3, r3, #3 + add r3, r3, #4 + subs r12, r6, r5, lsl #2 + add r1, r1, r3 + add r0, r0, r3 + beq 1b +7: mov r4, #0 +9: ldrb r3, [r1, r4] + ldrb r2, [r0, r4] + uqadd8 r3, r2, r3 + strb r3, [r1, r4] + add r4, r4, #1 + cmp r4, r12 + bne 9b + ldr r3, [sp] + add r8, r8, r3 + ldr r3, [sp, #40] + add r7, r7, r3 + b 10b +.endfunc + +pixman_asm_function pixman_composite_over_8888_8888_asm_armv6 + push {r4, r5, r6, r7, r8, r9, r10, r11} + sub sp, sp, #20 + cmp r1, #0 + mov r12, r2 + str r1, [sp, #12] + str r0, [sp, #16] + ldr r2, [sp, #52] + beq 0f + lsl r3, r3, #2 + str r3, [sp] + ldr r3, [sp, #56] + mov r10, #0 + lsl r3, r3, #2 + str r3, [sp, #8] + mov r11, r3 + b 1f +6: ldr r11, [sp, #8] +1: ldr r9, [sp] + mov r0, r12 + add r12, r12, r9 + mov r1, r2 + str r12, [sp, #4] + add r2, r2, r11 + ldr r12, [sp, #16] + ldr r3, =0x00800080 + ldr r9, =0xff00ff00 + mov r11, #255 + cmp r12, #0 + beq 4f +5: ldr r5, [r1], #4 + ldr r4, [r0] + sub r8, r11, r5, lsr #24 + uxtb16 r6, r4 + uxtb16 r7, r4, ror #8 + mla r6, r6, r8, r3 + mla r7, r7, r8, r3 + uxtab16 r6, r6, r6, ror #8 + uxtab16 r7, r7, r7, ror #8 + and r7, r7, r9 + uxtab16 r6, r7, r6, ror #8 + uqadd8 r5, r6, r5 + str r5, [r0], #4 + subs r12, r12, #1 + bne 5b +4: ldr r3, [sp, #12] + add r10, r10, #1 + cmp r10, r3 + ldr r12, [sp, #4] + bne 6b +0: add sp, sp, #20 + pop {r4, r5, r6, r7, r8, r9, r10, r11} + bx lr +.endfunc + +pixman_asm_function pixman_composite_over_8888_n_8888_asm_armv6 + push {r4, r5, r6, r7, r8, r9, r10, r11} + sub sp, sp, #28 + cmp r1, #0 + str r1, [sp, #12] + ldrb r1, [sp, #71] + mov r12, r2 + str r0, [sp, #16] + ldr r2, [sp, #60] + str r1, [sp, #24] + beq 0f + lsl r3, r3, #2 + str r3, [sp, #20] + ldr r3, [sp, #64] + mov r10, #0 + lsl r3, r3, #2 + str r3, [sp, #8] + mov r11, r3 + b 1f +5: ldr r11, [sp, #8] +1: ldr r4, [sp, #20] + mov r0, r12 + mov r1, r2 + add r12, r12, r4 + add r2, r2, r11 + str r12, [sp] + str r2, [sp, #4] + ldr r12, [sp, #16] + ldr r2, =0x00800080 + ldr r3, [sp, #24] + mov r11, #255 + cmp r12, #0 + beq 3f +4: ldr r5, [r1], #4 + ldr r4, [r0] + uxtb16 r6, r5 + uxtb16 r7, r5, ror #8 + mla r6, r6, r3, r2 + mla r7, r7, r3, r2 + uxtab16 r6, r6, r6, ror #8 + uxtab16 r7, r7, r7, ror #8 + uxtb16 r6, r6, ror #8 + uxtb16 r7, r7, ror #8 + orr r5, r6, r7, lsl #8 + uxtb16 r6, r4 + uxtb16 r7, r4, ror #8 + sub r8, r11, r5, lsr #24 + mla r6, r6, r8, r2 + mla r7, r7, r8, r2 + uxtab16 r6, r6, r6, ror #8 + uxtab16 r7, r7, r7, ror #8 + uxtb16 r6, r6, ror #8 + uxtb16 r7, r7, ror #8 + orr r6, r6, r7, lsl #8 + uqadd8 r5, r6, r5 + str r5, [r0], #4 + subs r12, r12, #1 + bne 4b +3: ldr r1, [sp, #12] + add r10, r10, #1 + cmp r10, r1 + ldr r12, [sp] + ldr r2, [sp, #4] + bne 5b +0: add sp, sp, #28 + pop {r4, r5, r6, r7, r8, r9, r10, r11} + bx lr +.endfunc + +pixman_asm_function pixman_composite_over_n_8_8888_asm_armv6 + push {r4, r5, r6, r7, r8, r9, r10, r11} + sub sp, sp, #28 + cmp r1, #0 + ldr r9, [sp, #60] + str r1, [sp, #12] + bic r1, r9, #-16777216 + str r1, [sp, #20] + mov r12, r2 + lsr r1, r9, #8 + ldr r2, [sp, #20] + bic r1, r1, #-16777216 + bic r2, r2, #65280 + bic r1, r1, #65280 + str r2, [sp, #20] + str r0, [sp, #16] + str r1, [sp, #4] + ldr r2, [sp, #68] + beq 0f + lsl r3, r3, #2 + str r3, [sp, #24] + mov r0, #0 + b 1f +5: ldr r3, [sp, #24] +1: ldr r4, [sp, #72] + mov r10, r12 + mov r1, r2 + add r12, r12, r3 + add r2, r2, r4 + str r12, [sp, #8] + str r2, [sp] + ldr r12, [sp, #16] + ldr r11, =0x00800080 + ldr r2, [sp, #4] + ldr r3, [sp, #20] + cmp r12, #0 + beq 3f +4: ldrb r5, [r1], #1 + ldr r4, [r10] + mla r6, r3, r5, r11 + mla r7, r2, r5, r11 + uxtab16 r6, r6, r6, ror #8 + uxtab16 r7, r7, r7, ror #8 + uxtb16 r6, r6, ror #8 + uxtb16 r7, r7, ror #8 + orr r5, r6, r7, lsl #8 + uxtb16 r6, r4 + uxtb16 r7, r4, ror #8 + mvn r8, r5 + lsr r8, r8, #24 + mla r6, r6, r8, r11 + mla r7, r7, r8, r11 + uxtab16 r6, r6, r6, ror #8 + uxtab16 r7, r7, r7, ror #8 + uxtb16 r6, r6, ror #8 + uxtb16 r7, r7, ror #8 + orr r6, r6, r7, lsl #8 + uqadd8 r5, r6, r5 + str r5, [r10], #4 + subs r12, r12, #1 + bne 4b +3: ldr r4, [sp, #12] + add r0, r0, #1 + cmp r0, r4 + ldr r12, [sp, #8] + ldr r2, [sp] + bne 5b +0: add sp, sp, #28 + pop {r4, r5, r6, r7, r8, r9, r10, r11} + bx lr +.endfunc diff --git a/pixman/pixman/pixman-arm-simd.c b/pixman/pixman/pixman-arm-simd.c index 09a288839..389c9e01a 100644 --- a/pixman/pixman/pixman-arm-simd.c +++ b/pixman/pixman/pixman-arm-simd.c @@ -28,31 +28,22 @@ #endif #include "pixman-private.h" +#include "pixman-arm-common.h" -static void -arm_composite_add_8000_8000 (pixman_implementation_t * impl, - 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) +#if 0 /* This code was moved to 'pixman-arm-simd-asm.S' */ + +void +pixman_composite_add_8000_8000_asm_armv6 (int32_t width, + int32_t height, + uint8_t *dst_line, + int32_t dst_stride, + uint8_t *src_line, + int32_t src_stride) { - uint8_t *dst_line, *dst; - uint8_t *src_line, *src; - int dst_stride, src_stride; + uint8_t *dst, *src; int32_t w; uint8_t s, d; - PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, uint8_t, src_stride, src_line, 1); - PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, uint8_t, dst_stride, dst_line, 1); - while (height--) { dst = dst_line; @@ -101,32 +92,21 @@ arm_composite_add_8000_8000 (pixman_implementation_t * impl, } -static void -arm_composite_over_8888_8888 (pixman_implementation_t * impl, - 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) +void +pixman_composite_over_8888_8888_asm_armv6 (int32_t width, + int32_t height, + uint32_t *dst_line, + int32_t dst_stride, + uint32_t *src_line, + int32_t src_stride) { - uint32_t *dst_line, *dst; - uint32_t *src_line, *src; - int dst_stride, src_stride; + uint32_t *dst; + uint32_t *src; int32_t w; uint32_t component_half = 0x800080; uint32_t upper_component_mask = 0xff00ff00; uint32_t alpha_mask = 0xff; - 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; @@ -194,33 +174,21 @@ arm_composite_over_8888_8888 (pixman_implementation_t * impl, } } -static void -arm_composite_over_8888_n_8888 (pixman_implementation_t * impl, - 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) +void +pixman_composite_over_8888_n_8888_asm_armv6 (int32_t width, + int32_t height, + uint32_t *dst_line, + int32_t dst_stride, + uint32_t *src_line, + int32_t src_stride, + uint32_t mask) { - uint32_t *dst_line, *dst; - uint32_t *src_line, *src; - uint32_t mask; - int dst_stride, src_stride; + uint32_t *dst; + uint32_t *src; int32_t w; uint32_t component_half = 0x800080; uint32_t alpha_mask = 0xff; - 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, PIXMAN_a8r8g8b8); mask = (mask) >> 24; while (height--) @@ -303,33 +271,22 @@ arm_composite_over_8888_n_8888 (pixman_implementation_t * impl, } } -static void -arm_composite_over_n_8_8888 (pixman_implementation_t * impl, - 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) +void +pixman_composite_over_n_8_8888_asm_armv6 (int32_t width, + int32_t height, + uint32_t *dst_line, + int32_t dst_stride, + uint32_t src, + int32_t unused, + uint8_t *mask_line, + int32_t mask_stride) { - uint32_t src, srca; - uint32_t *dst_line, *dst; - uint8_t *mask_line, *mask; - int dst_stride, mask_stride; + uint32_t srca; + uint32_t *dst; + uint8_t *mask; int32_t w; - src = _pixman_image_get_solid (src_image, dst_image->bits.format); - - /* bail out if fully transparent */ srca = src >> 24; - if (src == 0) - return; uint32_t component_mask = 0xff00ff; uint32_t component_half = 0x800080; @@ -337,9 +294,6 @@ arm_composite_over_n_8_8888 (pixman_implementation_t * impl, uint32_t src_hi = (src >> 8) & component_mask; uint32_t src_lo = src & component_mask; - 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); - while (height--) { dst = dst_line; @@ -419,21 +373,36 @@ arm_composite_over_n_8_8888 (pixman_implementation_t * impl, } } +#endif + +PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (armv6, add_8000_8000, + uint8_t, 1, uint8_t, 1) +PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (armv6, over_8888_8888, + uint32_t, 1, uint32_t, 1) + +PIXMAN_ARM_BIND_FAST_PATH_SRC_N_DST (armv6, over_8888_n_8888, + uint32_t, 1, uint32_t, 1) + +PIXMAN_ARM_BIND_FAST_PATH_N_MASK_DST (armv6, over_n_8_8888, + uint8_t, 1, uint32_t, 1) + static const pixman_fast_path_t arm_simd_fast_paths[] = { - PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, a8r8g8b8, arm_composite_over_8888_8888), - PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, x8r8g8b8, arm_composite_over_8888_8888), - PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null, a8b8g8r8, arm_composite_over_8888_8888), - PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null, x8b8g8r8, arm_composite_over_8888_8888), - PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, solid, a8r8g8b8, arm_composite_over_8888_n_8888), - PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, solid, x8r8g8b8, arm_composite_over_8888_n_8888), - - PIXMAN_STD_FAST_PATH (ADD, a8, null, a8, arm_composite_add_8000_8000), - - PIXMAN_STD_FAST_PATH (OVER, solid, a8, a8r8g8b8, arm_composite_over_n_8_8888), - PIXMAN_STD_FAST_PATH (OVER, solid, a8, x8r8g8b8, arm_composite_over_n_8_8888), - PIXMAN_STD_FAST_PATH (OVER, solid, a8, a8b8g8r8, arm_composite_over_n_8_8888), - PIXMAN_STD_FAST_PATH (OVER, solid, a8, x8b8g8r8, arm_composite_over_n_8_8888), + PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, a8r8g8b8, armv6_composite_over_8888_8888), + PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, x8r8g8b8, armv6_composite_over_8888_8888), + PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null, a8b8g8r8, armv6_composite_over_8888_8888), + PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null, x8b8g8r8, armv6_composite_over_8888_8888), + PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, solid, a8r8g8b8, armv6_composite_over_8888_n_8888), + PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, solid, x8r8g8b8, armv6_composite_over_8888_n_8888), + PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, solid, a8b8g8r8, armv6_composite_over_8888_n_8888), + PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, solid, x8b8g8r8, armv6_composite_over_8888_n_8888), + + PIXMAN_STD_FAST_PATH (ADD, a8, null, a8, armv6_composite_add_8000_8000), + + PIXMAN_STD_FAST_PATH (OVER, solid, a8, a8r8g8b8, armv6_composite_over_n_8_8888), + PIXMAN_STD_FAST_PATH (OVER, solid, a8, x8r8g8b8, armv6_composite_over_n_8_8888), + PIXMAN_STD_FAST_PATH (OVER, solid, a8, a8b8g8r8, armv6_composite_over_n_8_8888), + PIXMAN_STD_FAST_PATH (OVER, solid, a8, x8b8g8r8, armv6_composite_over_n_8_8888), { PIXMAN_OP_NONE }, }; diff --git a/pixman/pixman/pixman-version.h b/pixman/pixman/pixman-version.h index 4971ef46b..ff0cc1835 100644 --- a/pixman/pixman/pixman-version.h +++ b/pixman/pixman/pixman-version.h @@ -32,10 +32,10 @@ #endif #define PIXMAN_VERSION_MAJOR 0 -#define PIXMAN_VERSION_MINOR 17 -#define PIXMAN_VERSION_MICRO 12 +#define PIXMAN_VERSION_MINOR 18 +#define PIXMAN_VERSION_MICRO 0 -#define PIXMAN_VERSION_STRING "0.17.12" +#define PIXMAN_VERSION_STRING "0.18.0" #define PIXMAN_VERSION_ENCODE(major, minor, micro) ( \ ((major) * 10000) \ diff --git a/pixman/test/Makefile.in b/pixman/test/Makefile.in index 6d194888f..8d2292ac8 100644 --- a/pixman/test/Makefile.in +++ b/pixman/test/Makefile.in @@ -187,7 +187,6 @@ ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ -ARM_SIMD_CFLAGS = @ARM_SIMD_CFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ diff --git a/pixman/test/window-test.c b/pixman/test/window-test.c index 084e23a22..919fc16ed 100644 --- a/pixman/test/window-test.c +++ b/pixman/test/window-test.c @@ -137,8 +137,8 @@ main () pixman_image_t *src, *dest; int src_x, src_y, dest_x, dest_y; int i, j; - int width = get_rand (500); - int height = get_rand (500); + int width = get_rand (499) + 1; + int height = get_rand (499) + 1; src = make_image (width, height, TRUE, &src_x, &src_y); dest = make_image (width, height, FALSE, &dest_x, &dest_y); |