summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCosmin Truta <ctruta@gmail.com>2022-09-14 00:42:48 +0300
committerCosmin Truta <ctruta@gmail.com>2022-09-14 00:42:48 +0300
commit8c542ad9dfc3e7f8a8c790343a43d9cffbc54fd8 (patch)
treeeea7a86985fb0fb181eb6873b6d15d6e8be9d668
parent2abaf81e0f4a87942fcb9ef042905ef7578927ef (diff)
downloadlibpng-8c542ad9dfc3e7f8a8c790343a43d9cffbc54fd8.tar.gz
arm: Do not allow PNG_ARM_NEON_CHECK_SUPPORTED on ARM64
ARM Neon is expected to be unconditionally available on ARM64. Issue an #error if PNG_ARM_NEON_CHECK_SUPPORTED is defined on an ARM64-based platform. For the plain ARM platforms where ARM Neon checking is not yet implemented, issue a slightly more descriptive #error, including a suggested course of action.
-rw-r--r--arm/arm_init.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/arm/arm_init.c b/arm/arm_init.c
index a34ecdbef..ab22525b3 100644
--- a/arm/arm_init.c
+++ b/arm/arm_init.c
@@ -1,7 +1,7 @@
/* arm_init.c - NEON optimised filter functions
*
- * Copyright (c) 2018 Cosmin Truta
+ * Copyright (c) 2018-2022 Cosmin Truta
* Copyright (c) 2014,2016 Glenn Randers-Pehrson
* Written by Mans Rullgard, 2011.
*
@@ -10,9 +10,7 @@
* and license in png.h
*/
-/* Below, after checking __linux__, various non-C90 POSIX 1003.1 functions are
- * called.
- */
+/* This module requires POSIX 1003.1 functions. */
#define _POSIX_SOURCE 1
#include "../pngpriv.h"
@@ -33,21 +31,23 @@
* has partial support is contrib/arm-neon/linux.c - a generic Linux
* implementation which reads /proc/cpufino.
*/
+#include <signal.h> /* for sig_atomic_t */
+
#ifndef PNG_ARM_NEON_FILE
-# ifdef __linux__
-# define PNG_ARM_NEON_FILE "contrib/arm-neon/linux.c"
+# if defined(__aarch64__) || defined(_M_ARM64)
+ /* ARM Neon is expected to be unconditionally available on ARM64. */
+# error "PNG_ARM_NEON_CHECK_SUPPORTED must not be defined on this platform"
+# elif defined(__linux__)
+# define PNG_ARM_NEON_FILE "contrib/arm-neon/linux.c"
+# else
+# error "No support for run-time ARM Neon checking; use compile-time options"
# endif
#endif
-#ifdef PNG_ARM_NEON_FILE
-
-#include <signal.h> /* for sig_atomic_t */
static int png_have_neon(png_structp png_ptr);
-#include PNG_ARM_NEON_FILE
-
-#else /* PNG_ARM_NEON_FILE */
-# error "PNG_ARM_NEON_FILE undefined: no support for run-time ARM NEON checks"
-#endif /* PNG_ARM_NEON_FILE */
+#ifdef PNG_ARM_NEON_FILE
+# include PNG_ARM_NEON_FILE
+#endif
#endif /* PNG_ARM_NEON_CHECK_SUPPORTED */
#ifndef PNG_ALIGNED_MEMORY_SUPPORTED