Index: third_party/libpng/contrib/intel/INSTALL |
diff --git a/third_party/libpng/contrib/intel/INSTALL b/third_party/libpng/contrib/intel/INSTALL |
new file mode 100644 |
index 0000000000000000000000000000000000000000..cd5cdd94ebe4d57130a3eaf0fa7a5419c46c83a3 |
--- /dev/null |
+++ b/third_party/libpng/contrib/intel/INSTALL |
@@ -0,0 +1,158 @@ |
+Enabling SSE support |
+ |
+Copyright (c) 2016 Google, Inc. |
+Written by Mike Klein, Matt Sarett |
+ |
+This INSTALL file written by Glenn Randers-Pehrson, 2016. |
+ |
+If you have moved intel_init.c and filter_sse2_intrinsics.c to a different |
+directory, be sure to update the '#include "../../pngpriv.h"' line in both |
+files if necessary to point to the correct relative location of pngpriv.h |
+with respect to the new location of those files. |
+ |
+To enable SSE support in libpng, follow the instructions in I, II, or III, |
+below: |
+ |
+I. Using patched "configure" scripts: |
+ |
+First, apply intel_sse.patch in your build directory. |
+ |
+ patch -i contrib/intel/intel_sse.patch -p1 |
+ |
+Then, if you are not building in a new GIT clone, e.g., in a tar |
+distribution, remove any existing pre-built configure scripts: |
+ |
+ ./configure --enable-maintainer-mode |
+ make maintainer-clean |
+ ./autogen.sh --maintainer --clean |
+ |
+Finally, configure libpng with -DPNG_INTEL_SSE in CPPFLAGS: |
+ |
+ ./autogen.sh --maintainer |
+ CPPFLAGS="-DPNG_INTEL_SSE" ./configure [options] |
+ make CPPFLAGS="-DPNG_INTEL_SSE" [options] |
+ make |
+ |
+II. Using a custom makefile: |
+ |
+If you are using a custom makefile makefile, you will have to update it |
+manually to include contrib/intel/*.o in the dependencies, and to define |
+PNG_INTEL_SSE. |
+ |
+III. Using manually updated "configure" scripts: |
+ |
+If you prefer, manually edit pngpriv.h, configure.ac, and Makefile.am, |
+following the instructions below, then follow the instructions in |
+section II of INSTALL in the main libpng directory, then configure libpng |
+with -DPNG_INTEL_SSE in CPPFLAGS. |
+ |
+1. Add the following code to configure.ac under HOST SPECIFIC OPTIONS |
+directly beneath the section for ARM: |
+ |
+-----------------cut---------------- |
+# INTEL |
+# ===== |
+# |
+# INTEL SSE (SIMD) support. |
+ |
+AC_ARG_ENABLE([intel-sse], |
+ AS_HELP_STRING([[[--enable-intel-sse]]], |
+ [Enable Intel SSE optimizations: =no/off, yes/on:] |
+ [no/off: disable the optimizations;] |
+ [yes/on: enable the optimizations.] |
+ [If not specified: determined by the compiler.]), |
+ [case "$enableval" in |
+ no|off) |
+ # disable the default enabling: |
+ AC_DEFINE([PNG_INTEL_SSE_OPT], [0], |
+ [Disable Intel SSE optimizations]) |
+ # Prevent inclusion of the assembler files below: |
+ enable_intel_sse=no;; |
+ yes|on) |
+ AC_DEFINE([PNG_INTEL_SSE_OPT], [1], |
+ [Enable Intel SSE optimizations]);; |
+ *) |
+ AC_MSG_ERROR([--enable-intel-sse=${enable_intel_sse}: invalid value]) |
+ esac]) |
+ |
+# Add Intel specific files to all builds where the host_cpu is Intel ('x86*') |
+# or where Intel optimizations were explicitly requested (this allows a |
+# fallback if a future host CPU does not match 'x86*') |
+AM_CONDITIONAL([PNG_INTEL_SSE], |
+ [test "$enable_intel_sse" != 'no' && |
+ case "$host_cpu" in |
+ i?86|x86_64) :;; |
+ *) test "$enable_intel_sse" != '';; |
+ esac]) |
+-----------------cut---------------- |
+ |
+2. Add the following code to Makefile.am under HOST SPECIFIC OPTIONS |
+directly beneath the "if PNG_ARM_NEON ... endif" statement: |
+ |
+-----------------cut---------------- |
+if PNG_INTEL_SSE |
+libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES += contrib/intel/intel_init.c\ |
+ contrib/intel/filter_sse2_intrinsics.c |
+endif |
+-----------------cut---------------- |
+ |
+3. Add the following lines to pngpriv.h, following the PNG_ARM_NEON_OPT |
+code: |
+ |
+-----------------cut---------------- |
+#ifndef PNG_INTEL_SSE_OPT |
+# ifdef PNG_INTEL_SSE |
+ /* Only check for SSE if the build configuration has been modified to |
+ * enable SSE optimizations. This means that these optimizations will |
+ * be off by default. See contrib/intel for more details. |
+ */ |
+# if defined(__SSE4_1__) || defined(__AVX__) || defined(__SSSE3__) || \ |
+ defined(__SSE2__) || defined(_M_X64) || defined(_M_AMD64) || \ |
+ (defined(_M_IX86_FP) && _M_IX86_FP >= 2) |
+# define PNG_INTEL_SSE_OPT 1 |
+# endif |
+# endif |
+#endif |
+ |
+#if PNG_INTEL_SSE_OPT > 0 |
+# ifndef PNG_INTEL_SSE_IMPLEMENTATION |
+# if defined(__SSE4_1__) || defined(__AVX__) |
+ /* We are not actually using AVX, but checking for AVX is the best |
+ way we can detect SSE4.1 and SSSE3 on MSVC. |
+ */ |
+# define PNG_INTEL_SSE_IMPLEMENTATION 3 |
+# elif defined(__SSSE3__) |
+# define PNG_INTEL_SSE_IMPLEMENTATION 2 |
+# elif defined(__SSE2__) || defined(_M_X64) || defined(_M_AMD64) || \ |
+ (defined(_M_IX86_FP) && _M_IX86_FP >= 2) |
+# define PNG_INTEL_SSE_IMPLEMENTATION 1 |
+# else |
+# define PNG_INTEL_SSE_IMPLEMENTATION 0 |
+# endif |
+# endif |
+ |
+# if PNG_INTEL_SSE_IMPLEMENTATION > 0 |
+# define PNG_FILTER_OPTIMIZATIONS png_init_filter_functions_sse2 |
+# endif |
+#endif |
+ |
+-----------------cut---------------- |
+ |
+4. Add the following lines to pngpriv.h, following the prototype for |
+png_read_filter_row_paeth4_neon: |
+ |
+-----------------cut---------------- |
+PNG_INTERNAL_FUNCTION(void,png_read_filter_row_sub3_sse2,(png_row_infop |
+ row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY); |
+PNG_INTERNAL_FUNCTION(void,png_read_filter_row_sub4_sse2,(png_row_infop |
+ row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY); |
+PNG_INTERNAL_FUNCTION(void,png_read_filter_row_avg3_sse2,(png_row_infop |
+ row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY); |
+PNG_INTERNAL_FUNCTION(void,png_read_filter_row_avg4_sse2,(png_row_infop |
+ row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY); |
+PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth3_sse2,(png_row_infop |
+ row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY); |
+PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth4_sse2,(png_row_infop |
+ row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY); |
+ |
+-----------------cut---------------- |