2 /* filter_neon.S - placeholder file
4 * Copyright (c) 2024 Cosmin Truta
6 * This code is released under the libpng license.
7 * For conditions of distribution and use, see the disclaimer
13 * Historically, the hand-coded assembler implementation of Neon optimizations
14 * in this module had not been in sync with the intrinsics-based implementation
15 * in filter_neon_intrinsics.c and palette_neon_intrinsics.c, at least since
16 * the introduction of riffled palette optimizations. Moreover, the assembler
17 * code used to work on 32-bit ARM only, and it caused problems, even if empty,
20 * All references to this module from our internal build scripts and projects
23 * For the external projects that might still expect this module to be present,
24 * we leave this stub in place, for the remaining lifetime of libpng-1.6.x.
25 * Everything should continue to function normally, as long as there are no
26 * deliberate attempts to use the old hand-made assembler code. A build error
27 * will be raised otherwise.
30 /* These are required because Mozilla's moz.build system doesn't pass
31 * -DDefined macros to the assembler.
33 #define PNG_READ_SUPPORTED
34 #define MOZ_PNG_HAVE_ARM_NEON
36 /* This is required to get the symbol renames, which are #defines, and the
37 * definitions (or not) of PNG_ARM_NEON_OPT and PNG_ARM_NEON_IMPLEMENTATION.
39 #define PNG_VERSION_INFO_ONLY
40 #include "../pngpriv.h"
42 #ifdef PNG_READ_SUPPORTED
43 #if PNG_ARM_NEON_IMPLEMENTATION == 2 /* hand-coded assembler */
44 #if PNG_ARM_NEON_OPT > 0
46 #if defined(__clang__)
47 #define GNUC_VERSION 0 /* not gcc, although it might pretend to be */
48 #elif defined(__GNUC__)
49 #define GNUC_MAJOR (__GNUC__ + 0)
50 #define GNUC_MINOR (__GNUC_MINOR__ + 0)
51 #define GNUC_PATCHLEVEL (__GNUC_PATCHLEVEL__ + 0)
52 #define GNUC_VERSION (GNUC_MAJOR * 10000 + GNUC_MINOR * 100 + GNUC_PATCHLEVEL)
54 #define GNUC_VERSION 0 /* not gcc */
57 #if (GNUC_VERSION > 0) && (GNUC_VERSION < 40300)
58 #error "PNG_ARM_NEON is not supported with gcc versions earlier than 4.3.0"
59 #elif GNUC_VERSION == 40504
60 #error "PNG_ARM_NEON is not supported with gcc version 4.5.4"
62 #error "Please use 'arm/*_neon_intrinsics.c' for PNG_ARM_NEON support"
65 #endif /* PNG_ARM_NEON_OPT > 0 */
66 #endif /* PNG_ARM_NEON_IMPLEMENTATION == 2 */