use crate::declare_is_compatible;
use crate::x86_64::features::*;
declare_is_compatible!("k8", "fxsr", "sse", "sse2");
declare_is_compatible!("opteron", "fxsr", "sse", "sse2");
declare_is_compatible!("athlon64", "fxsr", "sse", "sse2");
declare_is_compatible!("athlon_fx", "fxsr", "sse", "sse2");
declare_is_compatible!("k8_sse3", "cmpxchg16b", "fxsr", "sse", "sse2", "sse3");
declare_is_compatible!("opteron_sse3", "cmpxchg16b", "fxsr", "sse", "sse2", "sse3");
declare_is_compatible!("athlon64_sse3", "cmpxchg16b", "fxsr", "sse", "sse2", "sse3");
declare_is_compatible!(
"amdfam10",
"cmpxchg16b",
"fxsr",
"lzcnt",
"popcnt",
"sse",
"sse2",
"sse3",
"sse4a"
);
declare_is_compatible!(
"barcelona",
"cmpxchg16b",
"fxsr",
"lzcnt",
"popcnt",
"sse",
"sse2",
"sse3",
"sse4a"
);
declare_is_compatible!(
"btver1",
"cmpxchg16b",
"fxsr",
"lzcnt",
"popcnt",
"sse",
"sse2",
"sse3",
"sse4a",
"ssse3"
);
declare_is_compatible!(
"bdver1",
"aes",
"avx",
"cmpxchg16b",
"fxsr",
"lzcnt",
"pclmulqdq",
"popcnt",
"sse",
"sse2",
"sse3",
"sse4_1",
"sse4_2",
"sse4a",
"ssse3",
"xsave"
);
declare_is_compatible!(
"bdver2",
"aes",
"avx",
"bmi1",
"cmpxchg16b",
"f16c",
"fma",
"fxsr",
"lzcnt",
"pclmulqdq",
"popcnt",
"sse",
"sse2",
"sse3",
"sse4_1",
"sse4_2",
"sse4a",
"ssse3",
"tbm",
"xsave"
);
declare_is_compatible!(
"btver2",
"aes",
"avx",
"bmi1",
"cmpxchg16b",
"f16c",
"fxsr",
"lzcnt",
"movbe",
"pclmulqdq",
"popcnt",
"sse",
"sse2",
"sse3",
"sse4_1",
"sse4_2",
"sse4a",
"ssse3",
"xsave",
"xsaveopt"
);
declare_is_compatible!(
"bdver3",
"aes",
"avx",
"bmi1",
"cmpxchg16b",
"f16c",
"fma",
"fxsr",
"lzcnt",
"pclmulqdq",
"popcnt",
"sse",
"sse2",
"sse3",
"sse4_1",
"sse4_2",
"sse4a",
"ssse3",
"tbm",
"xsave",
"xsaveopt"
);
declare_is_compatible!(
"bdver4",
"aes",
"avx",
"avx2",
"bmi1",
"bmi2",
"cmpxchg16b",
"f16c",
"fma",
"fxsr",
"lzcnt",
"movbe",
"pclmulqdq",
"popcnt",
"rdrand",
"sse",
"sse2",
"sse3",
"sse4_1",
"sse4_2",
"sse4a",
"ssse3",
"tbm",
"xsave",
"xsaveopt"
);
declare_is_compatible!(
"znver1",
"adx",
"aes",
"avx",
"avx2",
"bmi1",
"bmi2",
"cmpxchg16b",
"f16c",
"fma",
"fxsr",
"lzcnt",
"movbe",
"pclmulqdq",
"popcnt",
"rdrand",
"rdseed",
"sha",
"sse",
"sse2",
"sse3",
"sse4_1",
"sse4_2",
"sse4a",
"ssse3",
"xsave",
"xsavec",
"xsaveopt",
"xsaves"
);
declare_is_compatible!(
"znver2",
"adx",
"aes",
"avx",
"avx2",
"bmi1",
"bmi2",
"cmpxchg16b",
"f16c",
"fma",
"fxsr",
"lzcnt",
"movbe",
"pclmulqdq",
"popcnt",
"rdrand",
"rdseed",
"sha",
"sse",
"sse2",
"sse3",
"sse4_1",
"sse4_2",
"sse4a",
"ssse3",
"xsave",
"xsavec",
"xsaveopt",
"xsaves"
);
declare_is_compatible!(
"znver3",
"adx",
"aes",
"avx",
"avx2",
"bmi1",
"bmi2",
"cmpxchg16b",
"f16c",
"fma",
"fxsr",
"lzcnt",
"movbe",
"pclmulqdq",
"popcnt",
"rdrand",
"rdseed",
"sha",
"sse",
"sse2",
"sse3",
"sse4_1",
"sse4_2",
"sse4a",
"ssse3",
"vaes",
"vpclmulqdq",
"xsave",
"xsavec",
"xsaveopt",
"xsaves"
);
declare_is_compatible!(
"znver4",
"adx",
"aes",
"avx",
"avx2",
"avx512bf16",
"avx512bitalg",
"avx512bw",
"avx512cd",
"avx512dq",
"avx512f",
"avx512ifma",
"avx512vbmi",
"avx512vbmi2",
"avx512vl",
"avx512vnni",
"avx512vpopcntdq",
"bmi1",
"bmi2",
"cmpxchg16b",
"f16c",
"fma",
"fxsr",
"gfni",
"lzcnt",
"movbe",
"pclmulqdq",
"popcnt",
"rdrand",
"rdseed",
"sha",
"sse",
"sse2",
"sse3",
"sse4_1",
"sse4_2",
"sse4a",
"ssse3",
"vaes",
"vpclmulqdq",
"xsave",
"xsavec",
"xsaveopt",
"xsaves"
);
declare_is_compatible!(
"znver5",
"adx",
"aes",
"avx",
"avx2",
"avx512bf16",
"avx512bitalg",
"avx512bw",
"avx512cd",
"avx512dq",
"avx512f",
"avx512ifma",
"avx512vbmi",
"avx512vbmi2",
"avx512vl",
"avx512vnni",
"avx512vp2intersect",
"avx512vpopcntdq",
"avxvnni",
"bmi1",
"bmi2",
"cmpxchg16b",
"f16c",
"fma",
"fxsr",
"gfni",
"lzcnt",
"movbe",
"pclmulqdq",
"popcnt",
"rdrand",
"rdseed",
"sha",
"sse",
"sse2",
"sse3",
"sse4_1",
"sse4_2",
"sse4a",
"ssse3",
"vaes",
"vpclmulqdq",
"xsave",
"xsavec",
"xsaveopt",
"xsaves"
);