|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2] x86emul: adjust BSF/BSR/LZCNT/TZCNT behavior as to EFLAGS
On 14.07.2025 18:19, Andrew Cooper wrote:
> On 14/07/2025 5:02 pm, Jan Beulich wrote:
>> --- a/xen/arch/x86/x86_emulate/x86_emulate.c
>> +++ b/xen/arch/x86/x86_emulate/x86_emulate.c
>> @@ -5270,62 +5270,26 @@ x86_emulate(
>> break;
>>
>> case X86EMUL_OPC(0x0f, 0xbc): /* bsf or tzcnt */
>> - {
>> - bool zf;
>> -
>> - asm ( "bsf %2,%0" ASM_FLAG_OUT(, "; setz %1")
>> - : "=r" (dst.val), ASM_FLAG_OUT("=@ccz", "=qm") (zf)
>> - : "rm" (src.val) );
>> - _regs.eflags &= ~X86_EFLAGS_ZF;
>> - if ( (vex.pfx == vex_f3) && vcpu_has_bmi1() )
>> - {
>> - _regs.eflags &= ~X86_EFLAGS_CF;
>> - if ( zf )
>> - {
>> - _regs.eflags |= X86_EFLAGS_CF;
>> - dst.val = op_bytes * 8;
>> - }
>> - else if ( !dst.val )
>> - _regs.eflags |= X86_EFLAGS_ZF;
>> - }
>> - else if ( zf )
>> + if ( vex.pfx == vex_f3 )
>> + emulate_2op_SrcV_srcmem("rep; bsf", src, dst, _regs.eflags);
>
> Do we need the ; ?
>
> We surely don't on 4.21, but I presume there are bugs in older
> binutils? (All Clangs back to 3.5 seem happy)
Actually we can use TZCNT here and LZCNT below with gas 2.25 (and Clang
looks to be happy too, even version 3.0). I expect that's preferable over
merely omitting the semicolons?
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |