From b4a08b81b2d382b5d7531dc7ab95fc0a50867d25 Mon Sep 17 00:00:00 2001 From: John Bowler Date: Wed, 24 Apr 2013 21:31:04 -0500 Subject: [PATCH] [libpng15] Ensure that NEON filter stuff is completely disabled when switched 'off'. Previously the ARM NEON specific files were still built if the option was switched 'off' as opposed to being explicitly disabled. --- ANNOUNCE | 7 +++++-- CHANGES | 7 +++++-- arm/arm_init.c | 4 ++-- arm/filter_neon.S | 9 ++++----- configure.ac | 36 +++++++++++++++++++++++++++--------- 5 files changed, 43 insertions(+), 20 deletions(-) diff --git a/ANNOUNCE b/ANNOUNCE index 1075e1a6c..614f2769c 100644 --- a/ANNOUNCE +++ b/ANNOUNCE @@ -1,5 +1,5 @@ -Libpng 1.5.16beta01 - April 23, 2013 +Libpng 1.5.16beta01 - April 25, 2013 This is not intended to be a public release. It will be replaced within a few weeks by a public version or by another test version. @@ -26,10 +26,13 @@ Other information: Changes since the last public release (1.5.15): -Version 1.5.16beta01 [April 23, 2013] +Version 1.5.16beta01 [April 25, 2013] Corrected a misplaced closing bracket in contrib/libtests/pngvalid.c (Flavio Medeiros). Revised stack marking in arm/filter_neon.S and configure.ac + Ensure that NEON filter stuff is completely disabled when switched 'off'. + Previously the ARM NEON specific files were still built if the option + was switched 'off' as opposed to being explicitly disabled. Send comments/corrections/commendations to png-mng-implement at lists.sf.net (subscription required; visit diff --git a/CHANGES b/CHANGES index b03f9620b..8c68302c8 100644 --- a/CHANGES +++ b/CHANGES @@ -4070,10 +4070,13 @@ Version 1.5.15rc01 [March 21, 2013] Version 1.5.15 [March 28, 2013] No changes. -Version 1.5.16beta01 [April 23, 2013] +Version 1.5.16beta01 [April 25, 2013] Corrected a misplaced closing bracket in contrib/libtests/pngvalid.c (Flavio Medeiros). - Revised stack marking in arm/filter_neon.S and configure.ac + Revised stack marking in arm/filter_neon.S and configure.ac. + Ensure that NEON filter stuff is completely disabled when switched 'off'. + Previously the ARM NEON specific files were still built if the option + was switched 'off' as opposed to being explicitly disabled. Send comments/corrections/commendations to png-mng-implement at lists.sf.net (subscription required; visit diff --git a/arm/arm_init.c b/arm/arm_init.c index 795dd4938..c24b2a083 100644 --- a/arm/arm_init.c +++ b/arm/arm_init.c @@ -3,7 +3,7 @@ * * Copyright (c) 2013 Glenn Randers-Pehrson * Written by Mans Rullgard, 2011. - * Last changed in libpng 1.5.15 [March 28, 2013] + * Last changed in libpng 1.5.16 [(PENDING RELEASE)] * * This code is released under the libpng license. * For conditions of distribution and use, see the disclaimer @@ -216,4 +216,4 @@ png_init_filter_functions_neon(png_structp pp, unsigned int bpp) png_read_filter_row_paeth4_neon; } } -#endif /* FILTER_OPTIMIZATIONS && __arm__ && __ARM_NEON__ */ +#endif /* PNG_ARM_NEON_SUPPORTED */ diff --git a/arm/filter_neon.S b/arm/filter_neon.S index c25f9b8b0..827d1a390 100644 --- a/arm/filter_neon.S +++ b/arm/filter_neon.S @@ -3,7 +3,7 @@ * * Copyright (c) 2013 Glenn Randers-Pehrson * Written by Mans Rullgard, 2011. - * Last changed in libpng 1.5.16 [%RDATE%] + * Last changed in libpng 1.5.16 [(PENDING RELEASE)] * * This code is released under the libpng license. * For conditions of distribution and use, see the disclaimer @@ -11,7 +11,7 @@ */ /* This is required to get the symbol renames, which are #defines, and also - * includes the value of PNG_FILTER_OPTIMIZATIONS. + * includes the definition (or not) of PNG_ARM_NEON_SUPPORTED. */ #define PNG_VERSION_INFO_ONLY #include "../pngpriv.h" @@ -20,8 +20,7 @@ .section .note.GNU-stack,"",%progbits /* mark stack as non-executable */ #endif -#if defined(PNG_FILTER_OPTIMIZATIONS) && defined(__arm__) && \ - defined(__ARM_NEON__) +#ifdef PNG_ARM_NEON_SUPPORTED #ifdef __ELF__ # define ELF @@ -233,4 +232,4 @@ func png_read_filter_row_paeth3_neon, export=1 pop {r4,pc} endfunc -#endif /* FILTER_OPTIMIZATIONS && __arm__ && __ARM_NEON__ */ +#endif /* PNG_ARM_NEON_SUPPORTED */ diff --git a/configure.ac b/configure.ac index 9452ded72..4956d5c59 100644 --- a/configure.ac +++ b/configure.ac @@ -166,30 +166,48 @@ AC_ARG_WITH(binconfigs, [binconfigs='${binconfigs}']) AC_SUBST([binconfigs]) +# HOST SPECIFIC OPTIONS +# ===================== +# +# ARM +# === +# +# ARM NEON (SIMD) support. + AC_ARG_ENABLE([arm-neon], AS_HELP_STRING([[[--enable-arm-neon]]], - [Enable ARM NEON optimizations: =off, check, api, on:] - [off: disable the optimizations; check: use internal checking code] + [Enable ARM NEON optimizations: =no/off, check, api, yes/on:] + [no/off: disable the optimizations; check: use internal checking code] [(deprecated and poorly supported); api: disable by default, enable by] - [a call to png_set_option; on: turn on unconditionally. The] - [default is 'on' if __ARM_NEON__ is defined, otherwise 'off'.]), + [a call to png_set_option; yes/on: turn on unconditionally.]), [case "$enableval" in - off) + no|off) + # disable the default enabling on __ARM_NEON__ systems: AC_DEFINE([PNG_NO_ARM_NEON], [], - [Disable ARM Neon optimizations]);; + [Disable ARM Neon optimizations]) + # Prevent inclusion of the assembler files below: + enable_arm_neon=no;; check) AC_DEFINE([PNG_ARM_NEON_CHECK_SUPPORTED], [], [Check for ARM Neon support at run-time]);; api) AC_DEFINE([PNG_ARM_NEON_API_SUPPORTED], [], [Turn on ARM Neon optimizations at run-time]);; - on) + yes|on) AC_DEFINE([PNG_ARM_NEON_SUPPORTED], [], [Enable ARM Neon optimizations]);; *) - AC_MSG_ERROR([arm-neon: option value required (off/check/api/on)]);; + AC_MSG_ERROR([--enable-arm-neon=${enable_arm_neon}: invalid value]) esac]) -AM_CONDITIONAL([PNG_ARM_NEON], [test "${enable_arm_neon:-no}" != "no"]) + +# If enable/disable was not specified default to using the optimizations if the +# host CPU is ARM and the comppiler is targeting a NEON host. The latter test +# is done in scripts/pnglibconf.dfa by checking for __ARM_NEON__. The +# AM_CONDITIONAL below controls whether the ARM NEON source files are built. + +AM_CONDITIONAL([PNG_ARM_NEON], + [test "$enable_arm_neon" != 'no' && + test "$host_cpu" = 'arm' -o "$enable_arm_neon" != '']) AC_MSG_NOTICE([[Extra options for compiler: $PNG_COPTS]])