1f08c3bdfSopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 2f08c3bdfSopenharmony_ci 3f08c3bdfSopenharmony_ci#if !(defined(__i386__) || defined(__x86_64__)) 4f08c3bdfSopenharmony_ci# error "cpuid.h should only be included on x86" 5f08c3bdfSopenharmony_ci#endif 6f08c3bdfSopenharmony_ci 7f08c3bdfSopenharmony_ci#ifdef HAVE_CPUID_H 8f08c3bdfSopenharmony_ci# include <cpuid.h> 9f08c3bdfSopenharmony_ci#endif 10f08c3bdfSopenharmony_ci 11f08c3bdfSopenharmony_ci#ifndef LAPI_CPUID_H__ 12f08c3bdfSopenharmony_ci#define LAPI_CPUID_H__ 13f08c3bdfSopenharmony_ci 14f08c3bdfSopenharmony_ci/* 15f08c3bdfSopenharmony_ci * gcc cpuid.h provides __cpuid_count() since v4.4. 16f08c3bdfSopenharmony_ci * Clang/LLVM cpuid.h provides __cpuid_count() since v3.4.0. 17f08c3bdfSopenharmony_ci * 18f08c3bdfSopenharmony_ci * Provide local define for tests needing __cpuid_count() because 19f08c3bdfSopenharmony_ci * ltp needs to work in older environments that do not yet 20f08c3bdfSopenharmony_ci * have __cpuid_count(). 21f08c3bdfSopenharmony_ci */ 22f08c3bdfSopenharmony_ci#ifndef __cpuid_count 23f08c3bdfSopenharmony_ci#define __cpuid_count(level, count, a, b, c, d) ({ \ 24f08c3bdfSopenharmony_ci __asm__ __volatile__ ("cpuid\n\t" \ 25f08c3bdfSopenharmony_ci : "=a" (a), "=b" (b), "=c" (c), "=d" (d) \ 26f08c3bdfSopenharmony_ci : "0" (level), "2" (count)); \ 27f08c3bdfSopenharmony_ci}) 28f08c3bdfSopenharmony_ci#endif 29f08c3bdfSopenharmony_ci 30f08c3bdfSopenharmony_ci#endif /* LAPI_CPUID_H__ */ 31