1 /*! 2 * \copy 3 * Copyright (c) 2009-2013, Cisco Systems 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 10 * * Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 13 * * Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in 15 * the documentation and/or other materials provided with the 16 * distribution. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 21 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 22 * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 23 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 24 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 26 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 28 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 * POSSIBILITY OF SUCH DAMAGE. 30 * 31 * 32 * \file cpu.h 33 * 34 * \brief CPU feature compatibility detection 35 * 36 * \date 04/29/2009 Created 37 * 38 ************************************************************************************* 39 */ 40 #if !defined(WELS_CPU_DETECTION_H__) 41 #define WELS_CPU_DETECTION_H__ 42 43 #include "typedefs.h" 44 #include "cpu_core.h" 45 46 47 #if defined(__cplusplus) 48 extern "C" { 49 #endif//__cplusplus 50 51 #if defined(X86_ASM) 52 /* 53 * cpuid support verify routine 54 * return 0 if cpuid is not supported by cpu 55 */ 56 int32_t WelsCPUIdVerify(); 57 58 void WelsCPUId (uint32_t uiIndex, uint32_t* pFeatureA, uint32_t* pFeatureB, uint32_t* pFeatureC, uint32_t* pFeatureD); 59 60 int32_t WelsCPUSupportAVX (uint32_t eax, uint32_t ecx); 61 int32_t WelsCPUSupportFMA (uint32_t eax, uint32_t ecx); 62 uint32_t WelsCPUDetectAVX512(); 63 64 void WelsEmms(); 65 66 /* 67 * clear FPU registers states for potential float based calculation if support 68 */ 69 void WelsCPURestore (const uint32_t kuiCPU); 70 71 #else 72 #define WelsEmms() 73 #endif 74 75 uint32_t WelsCPUFeatureDetect (int32_t* pNumberOfLogicProcessors); 76 77 #if defined(__cplusplus) 78 } 79 #endif//__cplusplus 80 81 #endif//WELS_CPU_DETECTION_H__ 82