On Sun, Jan 10, 2021 at 8:38 PM Roman Bolshakov <r.bolsha...@yadro.com> wrote: > I'm not sure if eax should be modified with mask because the mask has no > value per se. I.e. eax &= supp_xcr0 from below should be placed inside > the if. It'd express clearly that eax is not modified unless xgetbv is > supported.
Like this? - uint64_t host_xcr0 = xgetbv(0); - uint64_t supp_xcr0 = host_xcr0 & (XSTATE_FP_MASK | XSTATE_SSE_MASK | + uint64_t host_xcr0; + if (xgetbv(ecx, 0, &host_xcr0)) { + uint64_t supp_xcr0 = host_xcr0 & (XSTATE_FP_MASK | XSTATE_SSE_MASK | XSTATE_YMM_MASK | XSTATE_BNDREGS_MASK | XSTATE_BNDCSR_MASK | XSTATE_OPMASK_MASK | XSTATE_ZMM_Hi256_MASK | XSTATE_Hi16_ZMM_MASK); - eax &= supp_xcr0; + eax &= supp_xcr0; + }