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