7828acafb84743d9590646329f870c8cffc428bf
[platform/upstream/libpng.git] / contrib / powerpc-vsx / linux_aux.c
1 /* contrib/powerpc-vsx/linux_aux.c
2  *
3  * Copyright (c) 2017 Glenn Randers-Pehrson
4  * Written by Vadim Barkov, 2017.
5  * Last changed in libpng 1.6.29 [March 16, 2017]
6  *
7  * This code is released under the libpng license.
8  * For conditions of distribution and use, see the disclaimer
9  * and license in png.h
10  *
11  * STATUS: TESTED
12  * BUG REPORTS: png-mng-implement@sourceforge.net
13  *
14  * png_have_vsx implemented for Linux by using the auxiliary vector mechanism.
15  *
16  * This code is strict ANSI-C and is probably moderately portable; it does
17  * however use <stdio.h> and it assumes that /proc/cpuinfo is never localized.
18  */
19
20 #include "sys/auxv.h"
21 #include "png.h"
22
23 static int
24 png_have_vsx(png_structp png_ptr)
25 {
26    unsigned long auxv = getauxval(AT_HWCAP);
27
28    PNG_UNUSED(png_ptr)
29
30    if(auxv & (PPC_FEATURE_HAS_ALTIVEC|PPC_FEATURE_HAS_VSX))
31       return 1;
32    else
33       return 0;
34 }