Merge "libpng NEON enablement for ARM64"
diff --git a/Android.mk b/Android.mk
index 41f89c9..d923da0 100644
--- a/Android.mk
+++ b/Android.mk
@@ -24,6 +24,8 @@
my_cflags_arm := -DPNG_ARM_NEON_OPT=2 -DPNG_ARM_NEON_CHECK_SUPPORTED
endif
+my_cflags_arm64 := -DPNG_ARM_NEON_OPT=2 -DPNG_ARM_NEON_CHECK_SUPPORTED
+
# BUG: http://llvm.org/PR19472 - SLP vectorization (on ARM at least) crashes
# when we can't lower a vectorized bswap.
my_cflags_arm += -fno-slp-vectorize
@@ -83,6 +85,8 @@
LOCAL_CFLAGS_arm := $(my_cflags_arm)
LOCAL_ASFLAGS += $(common_ASFLAGS)
LOCAL_SRC_FILES_arm := $(my_src_files_arm)
+LOCAL_CFLAGS_arm64 := $(my_cflags_arm64)
+LOCAL_SRC_FILES_arm64 := $(my_src_files_arm)
LOCAL_C_INCLUDES += $(common_C_INCLUDES) \
external/zlib
@@ -103,6 +107,8 @@
LOCAL_CFLAGS_arm := $(my_cflags_arm)
LOCAL_ASFLAGS += $(common_ASFLAGS)
LOCAL_SRC_FILES_arm := $(my_src_files_arm)
+LOCAL_CFLAGS_arm64 := $(my_cflags_arm64)
+LOCAL_SRC_FILES_arm64 := $(my_src_files_arm)
LOCAL_C_INCLUDES += $(common_C_INCLUDES) \
external/zlib
diff --git a/pngpriv.h b/pngpriv.h
index 8ced0f7..96b0ca1 100644
--- a/pngpriv.h
+++ b/pngpriv.h
@@ -119,8 +119,12 @@
* PNG_ARM_NEON_OPT is set in CPPFLAGS (to >0) then arm/arm_init.c will fail
* to compile with an appropriate #error if ALIGNED_MEMORY has been turned
* off.
+ *
+ * Note that gcc-4.9 defines __ARM_NEON instead of __ARM_NEON__, so we
+ * check both variants.
*/
-# if defined(__ARM_NEON__) && defined(PNG_ALIGNED_MEMORY_SUPPORTED)
+# if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \
+ defined(PNG_ALIGNED_MEMORY_SUPPORTED)
# define PNG_ARM_NEON_OPT 2
# else
# define PNG_ARM_NEON_OPT 0
@@ -148,7 +152,7 @@
* libpng implementation list for incorporation in the next minor release.
*/
# ifndef PNG_ARM_NEON_IMPLEMENTATION
-# ifdef __ARM_NEON__
+# if defined(__ARM_NEON__) || defined(__ARM_NEON)
# if defined(__clang__)
/* At present it is unknown by the libpng developers which versions
* of clang support the intrinsics, however some or perhaps all