[PATCH 1/2] [PATCH 1/2] Enable Intel AVX512_FP16 instructions

Cui, Lili lili.cui@intel.com
Tue Jul 13 06:58:12 GMT 2021


> -----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;
      }

Thank,
Lili.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-PATCH-1-2-Enable-Intel-AVX512_FP16-instructions.patch
Type: application/octet-stream
Size: 111665 bytes
Desc: 0001-PATCH-1-2-Enable-Intel-AVX512_FP16-instructions.patch
URL: <https://sourceware.org/pipermail/binutils/attachments/20210713/38b00000/attachment-0001.obj>


More information about the Binutils mailing list