85 bool mmx_avail = ((mmx_abcd[3] & 0x00800000) == 0x00800000);
91 bool sse_avail = ((mmx_abcd[3] & 0x02000000) == 0x02000000);
95 bool sse2_avail = ((mmx_abcd[3] & 0x04000000) == 0x04000000);
99 bool sse3_avail = ((mmx_abcd[2] & 0x00000001) == 0x00000001);
103 bool ssse3_avail = ((mmx_abcd[2] & 0x00000200) == 0x00000200);
107 bool sse41_avail = ((mmx_abcd[2] & 0x00080000) == 0x00080000);
110 bool sse42_avail = ((mmx_abcd[2] & 0x00100000) == 0x00100000);
115 uint64_t xcr_val = 0;
116 bool osxsave_avail, ymm_avail, avx_avail =
false;
117 osxsave_avail = ((mmx_abcd[2] & 0x08000000) == 0x08000000);
121 ymm_avail = osxsave_avail && ((xcr_val & 0x6) == 0x6);
122 avx_avail = ymm_avail && (mmx_abcd[2] & 0x10000000);
128 uint32_t avx2_abcd[4];
130 bool avx2_avail = (avx2_abcd[1] & 0x20) != 0;
135 avx2_avail && ((mmx_abcd[2] & 0x1000) == 0x1000);
141 osxsave_avail && ((xcr_val & 0xE0) == 0xE0);
142 bool avx512f_avail = (avx2_abcd[1] & 0x10000) != 0;
143 bool avx512cd_avail = (avx2_abcd[1] & 0x10000000) != 0;
145 zmm_avail && avx512f_avail && avx512cd_avail;