forked from pnggroup/libpng
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
arm: Add a placeholder file in lieu of the former
filter_neon.S
In the previous commit 9e53875 we removed the obsolete assembler implementation `filter_neon.S`. In this commit we add a stand-in for the original file, restoring the original source tree structure, for the benefit of continuing hassle-free libpng source upgrades in the 1.6.x line.
- Loading branch information
Showing
1 changed file
with
61 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
|
||
/* filter_neon.S - placeholder file | ||
* | ||
* Copyright (c) 2024 Cosmin Truta | ||
* | ||
* This code is released under the libpng license. | ||
* For conditions of distribution and use, see the disclaimer | ||
* and license in png.h | ||
*/ | ||
|
||
/* IMPORTANT NOTE: | ||
* | ||
* Historically, the hand-coded assembler implementation of Neon optimizations | ||
* in this module had not been in sync with the intrinsics-based implementation | ||
* in filter_neon_intrinsics.c and palette_neon_intrinsics.c, at least since | ||
* the introduction of riffled palette optimizations. Moreover, the assembler | ||
* code used to work on 32-bit ARM only, and it caused problems, even if empty, | ||
* on 64-bit ARM. | ||
* | ||
* All references to this module from our internal build scripts and projects | ||
* have been removed. | ||
* | ||
* For the external projects that might still expect this module to be present, | ||
* we leave this stub in place, for the remaining lifetime of libpng-1.6.x. | ||
* Everything should continue to function normally, as long as there are no | ||
* deliberate attempts to use the old hand-made assembler code. A build error | ||
* will be raised otherwise. | ||
*/ | ||
|
||
/* This is required to get the symbol renames, which are #defines, and the | ||
* definitions (or not) of PNG_ARM_NEON_OPT and PNG_ARM_NEON_IMPLEMENTATION. | ||
*/ | ||
#define PNG_VERSION_INFO_ONLY | ||
#include "../pngpriv.h" | ||
|
||
#ifdef PNG_READ_SUPPORTED | ||
#if PNG_ARM_NEON_IMPLEMENTATION == 2 /* hand-coded assembler */ | ||
#if PNG_ARM_NEON_OPT > 0 | ||
|
||
#if defined(__clang__) | ||
#define GNUC_VERSION 0 /* not gcc, although it might pretend to be */ | ||
#elif defined(__GNUC__) | ||
#define GNUC_MAJOR (__GNUC__ + 0) | ||
#define GNUC_MINOR (__GNUC_MINOR__ + 0) | ||
#define GNUC_PATCHLEVEL (__GNUC_PATCHLEVEL__ + 0) | ||
#define GNUC_VERSION (GNUC_MAJOR * 10000 + GNUC_MINOR * 100 + GNUC_PATCHLEVEL) | ||
#else | ||
#define GNUC_VERSION 0 /* not gcc */ | ||
#endif | ||
|
||
#if (GNUC_VERSION > 0) && (GNUC_VERSION < 40300) | ||
#error "PNG_ARM_NEON is not supported with gcc versions earlier than 4.3.0" | ||
#elif GNUC_VERSION == 40504 | ||
#error "PNG_ARM_NEON is not supported with gcc version 4.5.4" | ||
#else | ||
#error "Please use 'arm/*_neon_intrinsics.c' for PNG_ARM_NEON support" | ||
#endif | ||
|
||
#endif /* PNG_ARM_NEON_OPT > 0 */ | ||
#endif /* PNG_ARM_NEON_IMPLEMENTATION == 2 */ | ||
#endif /* READ */ |