19#ifndef ZEND_CPU_INFO_H
20#define ZEND_CPU_INFO_H
24#define ZEND_CPU_EBX_MASK (1<<30)
25#define ZEND_CPU_EDX_MASK (1U<<31)
109#ifndef __has_attribute
110# define __has_attribute(x) 0
116#if __has_attribute(no_sanitize_address)
117# define ZEND_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address))
119# define ZEND_NO_SANITIZE_ADDRESS
122#ifdef PHP_HAVE_BUILTIN_CPU_SUPPORTS
129static inline int zend_cpu_supports_sse2(
void) {
130#ifdef PHP_HAVE_BUILTIN_CPU_INIT
131 __builtin_cpu_init();
133 return __builtin_cpu_supports(
"sse2");
137static inline int zend_cpu_supports_sse3(
void) {
138#ifdef PHP_HAVE_BUILTIN_CPU_INIT
139 __builtin_cpu_init();
141 return __builtin_cpu_supports(
"sse3");
145static inline int zend_cpu_supports_ssse3(
void) {
146#ifdef PHP_HAVE_BUILTIN_CPU_INIT
147 __builtin_cpu_init();
149 return __builtin_cpu_supports(
"ssse3");
153static inline int zend_cpu_supports_sse41(
void) {
154#ifdef PHP_HAVE_BUILTIN_CPU_INIT
155 __builtin_cpu_init();
157 return __builtin_cpu_supports(
"sse4.1");
161static inline int zend_cpu_supports_sse42(
void) {
162#ifdef PHP_HAVE_BUILTIN_CPU_INIT
163 __builtin_cpu_init();
165 return __builtin_cpu_supports(
"sse4.2");
169static inline int zend_cpu_supports_avx(
void) {
170#ifdef PHP_HAVE_BUILTIN_CPU_INIT
171 __builtin_cpu_init();
173 return __builtin_cpu_supports(
"avx");
177static inline int zend_cpu_supports_avx2(
void) {
178#ifdef PHP_HAVE_BUILTIN_CPU_INIT
179 __builtin_cpu_init();
181 return __builtin_cpu_supports(
"avx2");
184#ifdef PHP_HAVE_AVX512_SUPPORTS
186static inline int zend_cpu_supports_avx512(
void) {
187#ifdef PHP_HAVE_BUILTIN_CPU_INIT
188 __builtin_cpu_init();
190 return __builtin_cpu_supports(
"avx512f") && __builtin_cpu_supports(
"avx512dq")
191 && __builtin_cpu_supports(
"avx512cd") && __builtin_cpu_supports(
"avx512bw")
192 && __builtin_cpu_supports(
"avx512vl");
196#ifdef PHP_HAVE_AVX512_VBMI_SUPPORTS
198static inline int zend_cpu_supports_avx512_vbmi(
void) {
199#ifdef PHP_HAVE_BUILTIN_CPU_INIT
200 __builtin_cpu_init();
202 return zend_cpu_supports_avx512() && __builtin_cpu_supports(
"avx512vbmi");
208static inline int zend_cpu_supports_sse2(
void) {
212static inline int zend_cpu_supports_sse3(
void) {
216static inline int zend_cpu_supports_ssse3(
void) {
220static inline int zend_cpu_supports_sse41(
void) {
224static inline int zend_cpu_supports_sse42(
void) {
228static inline int zend_cpu_supports_avx(
void) {
232static inline int zend_cpu_supports_avx2(
void) {
236static inline int zend_cpu_supports_avx512(
void) {
248#if defined(PHP_HAVE_BUILTIN_CPU_SUPPORTS) && (!defined(__GNUC__) || (ZEND_GCC_VERSION >= 9000))
250static inline int zend_cpu_supports_pclmul(
void) {
251#ifdef PHP_HAVE_BUILTIN_CPU_INIT
252 __builtin_cpu_init();
254 return __builtin_cpu_supports(
"pclmul");
257static inline int zend_cpu_supports_pclmul(
void) {
263#if defined(PHP_HAVE_BUILTIN_CPU_SUPPORTS) && defined(__GNUC__) && (ZEND_GCC_VERSION >= 11000)
265static inline int zend_cpu_supports_cldemote(
void) {
266#ifdef PHP_HAVE_BUILTIN_CPU_INIT
267 __builtin_cpu_init();
269 return __builtin_cpu_supports(
"cldemote");
@ ZEND_CPU_FEATURE_MONITOR
@ ZEND_CPU_FEATURE_TSC_DEADLINE
@ ZEND_CPU_FEATURE_CLFLUSH
@ ZEND_CPU_FEATURE_POPCNT
@ ZEND_CPU_FEATURE_PCLMULQDQ
@ ZEND_CPU_FEATURE_DTES64
@ ZEND_CPU_FEATURE_X2APIC
@ ZEND_CPU_FEATURE_AVX512F
@ ZEND_CPU_FEATURE_AVX512CD
@ ZEND_CPU_FEATURE_AVX512DQ
@ ZEND_CPU_FEATURE_OSXSAVE
enum _zend_cpu_feature zend_cpu_feature
ZEND_API int zend_cpu_supports(zend_cpu_feature feature)
#define ZEND_NO_SANITIZE_ADDRESS
void zend_cpu_startup(void)
#define ZEND_CPU_EDX_MASK
#define ZEND_CPU_EBX_MASK
#define zend_always_inline