[PATCH V2 3/8] Support APX GPR32 with extend evex prefix

Jan Beulich jbeulich@suse.com
Tue Nov 14 10:40:25 GMT 2023


On 14.11.2023 08:42, Cui, Lili wrote:
>>
>>> --- a/opcodes/i386-dis-evex-len.h
>>> +++ b/opcodes/i386-dis-evex-len.h
>>> @@ -62,6 +62,16 @@ static const struct dis386 evex_len_table[][3] = {
>>>      { REG_TABLE (REG_EVEX_0F38C7_L_2) },
>>>    },
>>>
>>> +  /* EVEX_LEN_0F38F2 */
>>> +  {
>>> +    { "andnS",		{ Gdq, VexGdq, Edq }, 0 },
>>> +  },
>>
>> There's no sign of a prefix decode step here.
>>> +  /* MOD_EVEX_MAP4_F9 */
>>> +  {
>>> +    { "movdiri",	{ Edq, Gdq }, 0 },
>>> +  },
>>
> 
>> Missing PREFIX_OPCODE?
> 
> Legacy both have PREFIX_OPCODE, but currently EVEX seems to only use the vex.w bit to check the operand size. I'm confused whether we should add PREFIX_OPCODE ? Currently it reports bad.
> case PREFIX_OPCODE: 
> ...
>          (ins.vex.evex && dp->prefix_requirement != PREFIX_DATA
>               && !ins.vex.w != !(ins.used_prefixes & PREFIX_DATA))

Considering the context where this appears, this could equally be
written as

         (ins.vex.evex && dp->prefix_requirement == PREFIX_OPCODE
              && !ins.vex.w != !(ins.used_prefixes & PREFIX_DATA))

and is about many vector-FP AVX512 insns needing EVEX.W == EVEX.pp. From
that angle using PREFIX_OPCODE in the entries above doesn't look to be
right; I'm sorry for the wrong comment. Yet still EVEX.pp needs dealing
with everywhere, including for the entries above. Whether that's done by
going through prefix_table[] or by introducing a new PREFIX_* qualifier
or by yet other means is secondary (and a question of what's most
efficient).

Jan


More information about the Binutils mailing list