On 12/11/2024 3:00 pm, Jan Beulich wrote: > While result values and other status flags are unaffected as long as we > can ignore the case of registers having their upper 32 bits non-zero > outside of 64-bit mode, EFLAGS.SF may obtain a wrong value when we > mistakenly re-execute the original insn with VEX.W set. > > Note that the memory access, if any, is correctly carried out as 32-bit > regardless of VEX.W.
I don't understand why this is true. If we write out a VEX.W=1 form of BEXTR/etc and emulate while in 64bit mode, it will have an operand size of 64. I can believe that ... > Internal state also isn't leaked, as the field the > memory value is read into (which is then wrongly accessed as a 64-bit > quantity when executing the stub) is pre-initialized to zero. ... everything else treats the memory operand as 32bit, and uses the bottom half of the internal buffer, and generally does the right thing. ~Andrew