hi, This patch is to add a new configuration option: enable-cache-prefetch, which is default yes.
Here is a link which talks on cache issue. http://lists.freedesktop.org/archives/pixman/2010-June/000218.html When disable it on Atom CPU(configured with --enable-cache-prefetch=no), it will have a little performance gain. Here is the patch. Regards, Liu Xinyun Subject: [PATCH] Add disable cache prefetch. Disable cache prefetch for ATOM, the performance increased a little. old: 0.18.4-origin new: 0.18.4-disable-cache-prefetch Speedups ======== image-rgba gnome-terminal-vim-0 25068.39 (25095.11 0.06%) -> 23302.54 (23317.50 0.56%): 1.08x speedup ▏ image-rgba ocitysmap-0 8984.46 (8988.04 8.44%) -> 8416.64 (8489.40 6.91%): 1.07x speedup ▏ image-rgba firefox-talos-gfx-0 58330.34 (58361.84 0.23%) -> 54657.10 (55473.39 1.72%): 1.07x speedup ▏ image-rgba poppler-0 17265.62 (17437.80 0.84%) -> 16257.05 (16341.86 0.75%): 1.06x speedup image-rgba firefox-planet-gnome-0 104102.19 (104150.67 0.12%) -> 98324.84 (98402.02 0.32%): 1.06x speedup Signed-off-by: Liu Xinyun <[email protected]> Signed-off-by: Chen Miaobo <[email protected]> --- configure.ac | 13 +++++++++++++ pixman/pixman-sse2.c | 7 +++++++ 2 files changed, 20 insertions(+), 0 deletions(-) diff --git a/configure.ac b/configure.ac index c9269f4..a531cb7 100644 --- a/configure.ac +++ b/configure.ac @@ -280,6 +280,19 @@ fi AM_CONDITIONAL(USE_SSE2, test $have_sse2_intrinsics = yes) dnl =========================================================================== +dnl cache prefetch +AC_ARG_ENABLE(cache-prefetch, + [AC_HELP_STRING([--enable-cache-prefetch], + [disable DISABLE_CACHE_PREFETCH macros [default=yes]])], + [enable_cache_prefetch=$enableval], [enable_cache_prefetch=yes]) +#AC_CHECK_DECL(enable_cache_prefetch) +if test $enable_cache_prefetch = no ; then + AC_DEFINE(DISABLE_CACHE_PREFETCH, 1, [enable DISABLE_CACHE_PREFETCH macros]) +fi +AC_CHECK_DECL(DISABLE_CACHE_PREFETCH) +AC_SUBST(DISABLE_CACHE_PREFETCH) + +dnl =========================================================================== dnl Other special flags needed when building code using MMX or SSE instructions case $host_os in solaris*) diff --git a/pixman/pixman-sse2.c b/pixman/pixman-sse2.c index 946e7ba..708838a 100644 --- a/pixman/pixman-sse2.c +++ b/pixman/pixman-sse2.c @@ -384,6 +384,13 @@ maybe_prefetch_next (__m128i* addr) cache_prefetch_next (addr); } +#ifdef DISABLE_CACHE_PREFETCH +#define cache_prefetch(addr) do {} while (0); +#define cache_prefetch_next(addr) do {} while (0); +#define maybe_prefetch(addr) do {} while (0); +#define maybe_prefetch_next(addr) do {} while (0); +#endif + /* load 4 pixels from a 16-byte boundary aligned address */ static force_inline __m128i load_128_aligned (__m128i* src) -- 1.7.0.4 _______________________________________________ Pixman mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/pixman
