[PATCH 1/2] [PATCH 1/2] Enable Intel AVX512_FP16 instructions
Cui, Lili
lili.cui@intel.com
Tue Jul 13 08:03:51 GMT 2021
> -----Original Message-----
> From: Jan Beulich <jbeulich@suse.com>
> Sent: Tuesday, July 13, 2021 3:55 PM
> To: Cui, Lili <lili.cui@intel.com>
> Cc: hjl.tools@gmail.com; binutils@sourceware.org
> Subject: Re: [PATCH 1/2] [PATCH 1/2] Enable Intel AVX512_FP16 instructions
>
> On 13.07.2021 08:58, Cui, Lili wrote:
> >> -----Original Message-----
> >> From: Jan Beulich <jbeulich@suse.com>
> >> Sent: Friday, July 9, 2021 8:17 PM
> >> To: Cui, Lili <lili.cui@intel.com>
> >> Cc: hjl.tools@gmail.com; binutils@sourceware.org
> >> Subject: Re: [PATCH 1/2] [PATCH 1/2] Enable Intel AVX512_FP16
> >> instructions
> >>
> >> On 09.07.2021 13:47, Cui, Lili wrote:
> >>>> -----Original Message-----
> >>>> From: Jan Beulich <jbeulich@suse.com>
> >>>> Sent: Monday, July 5, 2021 2:30 PM
> >>>> To: Cui, Lili <lili.cui@intel.com>; hjl.tools@gmail.com
> >>>> Cc: binutils@sourceware.org
> >>>> Subject: Re: [PATCH 1/2] [PATCH 1/2] Enable Intel AVX512_FP16
> >>>> instructions
> >>>>
> >>>> On 01.07.2021 09:47, Cui,Lili wrote:
> >>>>> opcodes/i386-opc.tbl | 376 +++++++++++++++++++++
> >>>> VCVT{,T}SH2{,U}SI should have EvexWIG for their non-64bit encodings.
> >>>> But really it's unclear why each of them has three templates when
> >>>> the corresponding pre-existing SD and SS insns get away with two. I
> >>>> would have expected new templates to have been cloned from similar
> >>>> existing ones, rather than introducing new ones (with new
> >>>> inconsistencies). Of course there's (again) the possibility that
> >>>> you've spotted a bug with pre-existing templates, but then - if you
> >>>> don't want to fix those right away - I'd expect you to at least
> >>>> point out why you deviate from what
> >> we've got.
> >>>>
> >>> vcvtss2si has two templates because there is a special judgment in
> >> check_long_reg function, then the instruction can encode as EVEX.W =
> >> 1 without explicit VexW1.
> >>>
> >>> if (intel_syntax
> >>> && i.tm.opcode_modifier.toqword
> >>> && i.types[0].bitfield.class != RegSIMD)
> >>> {
> >>> /* Convert to QWORD. We want REX byte. */
> >>> i.suffix = QWORD_MNEM_SUFFIX;
> >>> }
> >>>
> >>> I add a special judgment in check_word_reg function, then
> >>> VCVT{,T}SH2{,U}SI
> >> can also have two templates. I think that in order to reduce the
> >> number of templates and make the code less readable, this is a
> >> trade-off. I changed it anyway. Jan, what are your thoughts here?
> >>>
> >>> else if (i.types[op].bitfield.qword
> >>> && (i.tm.operand_types[op].bitfield.class == Reg
> >>> || i.tm.operand_types[op].bitfield.instance == Accum)
> >>> && i.tm.operand_types[op].bitfield.qword)
> >>> {
> >>> if (intel_syntax
> >>> && i.tm.opcode_modifier.toqword
> >>> && i.types[0].bitfield.class != RegSIMD)
> >>> {
> >>> /* Convert to QWORD. We want REX byte. */
> >>> i.suffix = QWORD_MNEM_SUFFIX;
> >>> }
> >>> }
> >>
> >> I think this is the right thing to do, to keep things as symmetric /
> >> consistent as possible. The one part I don't understand though is the
> check against Accum.
> >> I'm also not sure you really need to check both i.types[] and
> >> i.tm.operand_types[] for qword: Doesn't this function run after
> >> template matching, in which case you only need to check the actual
> >> register type, not the
> >> one(s) the template permits? And finally - but without seeing the
> >> context I may be wrong here - as presented I'd suggest the two nested if()-
> s to be folded.
> >>
> > I merged two nested if(), and removed unnecessary checks.
> >
> > /* For some instructions need encode as EVEX.W=1 without explicit
> VexW1. */
> > else if (i.types[op].bitfield.qword
> > && i.tm.operand_types[op].bitfield.class == Reg
> > && intel_syntax
> > && i.tm.opcode_modifier.toqword
> > && i.types[0].bitfield.class != RegSIMD)
> > {
> > /* Convert to QWORD. We want REX byte. */
> > i.suffix = QWORD_MNEM_SUFFIX;
> > }
>
> Before I go look at this in detail - is this expected to be the final form of the
> rework following the v1 comments (i.e. is it v2), or are there yet further
> changes to be expected? If it is v2, it would be nice if you could submit it as
> such, as that would clarify matters.
It is v2, it is the final form.
More information about the Binutils
mailing list