On Mon, Jan 11, 2021 at 09:44:40PM -0800, Hill Ma wrote: > 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; > + }
Yes. Thanks, Roman