mirror of
https://git.code.sf.net/p/libpng/code.git
synced 2025-07-10 18:04:09 +02:00

Make the error directives uniformly consistent with one another. Remove surrounding quotes and trailing punctuation, and rephrase some of the error messages and some of their associated comments for either brevity or clarity.
126 lines
4.2 KiB
C
126 lines
4.2 KiB
C
/* powerpc_init.c - POWERPC optimised filter functions
|
|
*
|
|
* Copyright (c) 2018 Cosmin Truta
|
|
* Copyright (c) 2017 Glenn Randers-Pehrson
|
|
* Written by Vadim Barkov, 2017.
|
|
*
|
|
* This code is released under the libpng license.
|
|
* For conditions of distribution and use, see the disclaimer
|
|
* and license in png.h
|
|
*/
|
|
|
|
/* Below, after checking __linux__, various non-C90 POSIX 1003.1 functions are
|
|
* called.
|
|
*/
|
|
#define _POSIX_SOURCE 1
|
|
|
|
#include <stdio.h>
|
|
#include "../pngpriv.h"
|
|
|
|
#ifdef PNG_READ_SUPPORTED
|
|
|
|
#if PNG_POWERPC_VSX_OPT > 0
|
|
#ifdef PNG_POWERPC_VSX_CHECK_SUPPORTED /* Do run-time checks */
|
|
/* WARNING: it is strongly recommended that you do not build libpng with
|
|
* run-time checks for CPU features if at all possible. In the case of the PowerPC
|
|
* VSX instructions there is no processor-specific way of detecting the
|
|
* presence of the required support, therefore run-time detection is extremely
|
|
* OS specific.
|
|
*
|
|
* You may set the macro PNG_POWERPC_VSX_FILE to the file name of file containing
|
|
* a fragment of C source code which defines the png_have_vsx function. There
|
|
* are a number of implementations in contrib/powerpc-vsx, but the only one that
|
|
* has partial support is contrib/powerpc-vsx/linux.c - a generic Linux
|
|
* implementation which reads /proc/cpufino.
|
|
*/
|
|
#ifndef PNG_POWERPC_VSX_FILE
|
|
# ifdef __linux__
|
|
# define PNG_POWERPC_VSX_FILE "contrib/powerpc-vsx/linux_aux.c"
|
|
# endif
|
|
#endif
|
|
|
|
#ifdef PNG_POWERPC_VSX_FILE
|
|
|
|
#include <signal.h> /* for sig_atomic_t */
|
|
static int png_have_vsx(png_structp png_ptr);
|
|
#include PNG_POWERPC_VSX_FILE
|
|
|
|
#else /* PNG_POWERPC_VSX_FILE */
|
|
# error PNG_POWERPC_VSX_FILE undefined: no support for run-time POWERPC VSX checks
|
|
#endif /* PNG_POWERPC_VSX_FILE */
|
|
#endif /* PNG_POWERPC_VSX_CHECK_SUPPORTED */
|
|
|
|
void
|
|
png_init_filter_functions_vsx(png_structp pp, unsigned int bpp)
|
|
{
|
|
/* The switch statement is compiled in for POWERPC_VSX_API, the call to
|
|
* png_have_vsx is compiled in for POWERPC_VSX_CHECK. If both are defined
|
|
* the check is only performed if the API has not set the PowerPC option on
|
|
* or off explicitly. In this case the check controls what happens.
|
|
*/
|
|
|
|
#ifdef PNG_POWERPC_VSX_API_SUPPORTED
|
|
switch ((pp->options >> PNG_POWERPC_VSX) & 3)
|
|
{
|
|
case PNG_OPTION_UNSET:
|
|
/* Allow the run-time check to execute if it has been enabled -
|
|
* thus both API and CHECK can be turned on. If it isn't supported
|
|
* this case will fall through to the 'default' below, which just
|
|
* returns.
|
|
*/
|
|
#endif /* PNG_POWERPC_VSX_API_SUPPORTED */
|
|
#ifdef PNG_POWERPC_VSX_CHECK_SUPPORTED
|
|
{
|
|
static volatile sig_atomic_t no_vsx = -1; /* not checked */
|
|
|
|
if (no_vsx < 0)
|
|
no_vsx = !png_have_vsx(pp);
|
|
|
|
if (no_vsx)
|
|
return;
|
|
}
|
|
#ifdef PNG_POWERPC_VSX_API_SUPPORTED
|
|
break;
|
|
#endif
|
|
#endif /* PNG_POWERPC_VSX_CHECK_SUPPORTED */
|
|
|
|
#ifdef PNG_POWERPC_VSX_API_SUPPORTED
|
|
default: /* OFF or INVALID */
|
|
return;
|
|
|
|
case PNG_OPTION_ON:
|
|
/* Option turned on */
|
|
break;
|
|
}
|
|
#endif
|
|
|
|
/* IMPORTANT: any new internal functions used here must be declared using
|
|
* PNG_INTERNAL_FUNCTION in ../pngpriv.h. This is required so that the
|
|
* 'prefix' option to configure works:
|
|
*
|
|
* ./configure --with-libpng-prefix=foobar_
|
|
*
|
|
* Verify you have got this right by running the above command, doing a build
|
|
* and examining pngprefix.h; it must contain a #define for every external
|
|
* function you add. (Notice that this happens automatically for the
|
|
* initialization function.)
|
|
*/
|
|
pp->read_filter[PNG_FILTER_VALUE_UP-1] = png_read_filter_row_up_vsx;
|
|
|
|
if (bpp == 3)
|
|
{
|
|
pp->read_filter[PNG_FILTER_VALUE_SUB-1] = png_read_filter_row_sub3_vsx;
|
|
pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg3_vsx;
|
|
pp->read_filter[PNG_FILTER_VALUE_PAETH-1] = png_read_filter_row_paeth3_vsx;
|
|
}
|
|
|
|
else if (bpp == 4)
|
|
{
|
|
pp->read_filter[PNG_FILTER_VALUE_SUB-1] = png_read_filter_row_sub4_vsx;
|
|
pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg4_vsx;
|
|
pp->read_filter[PNG_FILTER_VALUE_PAETH-1] = png_read_filter_row_paeth4_vsx;
|
|
}
|
|
}
|
|
#endif /* PNG_POWERPC_VSX_OPT > 0 */
|
|
#endif /* READ */
|