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