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
png_have_vsx(png_structp png_ptr)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 }
35