[PATCH 1/3] Support Intel AMX-TRANSPOSE

Jan Beulich jbeulich@suse.com
Tue Dec 24 08:32:58 GMT 2024


On 24.12.2024 04:10, Jiang, Haochen wrote:
>> From: Jan Beulich <jbeulich@suse.com>
>> Sent: Thursday, December 19, 2024 7:21 PM
>>
>> On 18.12.2024 07:32, Haochen Jiang wrote:
>>> @@ -10750,25 +10752,43 @@ process_operands (void)
>>>        unsigned int op, extra;
>>>        const reg_entry *first;
>>>
>>> -      /* The second operand must be {x,y,z}mmN. */
>>> -      gas_assert (i.operands == 3 && i.types[1].bitfield.class == RegSIMD);
>>> +      /* The second operand must be {x,y,z,t}mmN */
>>> +      gas_assert ((i.operands == 2 || i.operands == 3)
>>> +		  && i.types[1].bitfield.class == RegSIMD);
>>>
>>> -      switch (i.types[2].bitfield.class)
>>> +      if (i.operands == 3)
>>>  	{
>>> -	case RegSIMD:
>>> -	  /* AVX512-{4FMAPS,4VNNIW} operand 2: N must be a multiple of
>> 4. */
>>> -	  op = 1;
>>> -	  extra = 3;
>>> -	  break;
>>> +	  switch (i.types[2].bitfield.class)
>>> +	    {
>>> +	    case RegSIMD:
>>> +	      /* AVX512-{4FMAPS,4VNNIW} operand 2: N must be a multiple of
>> 4. */
>>> +	      op = 1;
>>> +	      extra = 3;
>>> +	      break;
>>>
>>> -	case RegMask:
>>> -	  /* AVX512-VP2INTERSECT operand 3: N must be a multiple of 2. */
>>> -	  op = 2;
>>> -	  extra = 1;
>>> -	  break;
>>> +	    case RegMask:
>>> +	      /* AVX512-VP2INTERSECT operand 3: N must be a multiple of 2. */
>>> +	      op = 2;
>>> +	      extra = 1;
>>> +	      break;
>>>
>>> -	default:
>>> -	  abort ();
>>> +	    default:
>>> +	      abort ();
>>> +	    }
>>> +	}
>>> +      else
>>> +	{
>>> +	  switch (i.types[1].bitfield.class)
>>> +	    {
>>> +	    case RegSIMD:
>>> +	      /* AMX-TRANSPOSE operand 2: N must be a multiple of 2. */
>>> +	      op = 1;
>>> +	      extra = 1;
>>> +	      break;
>>> +
>>> +	    default:
>>> +	      abort ();
>>> +	    }
>>>  	}
>>
>> This could have been done with less churn, also making it easier to review.
>> There's imo no need to wrap an operand count check around the switch().
>> Instead in the RegSIMD case you can check the register type (Tmmword), thus
>> likely making the new code a simple insertion. That's what I had in mind when
>> originally laying out the code that you're now fully re-indenting.
>>
> 
> Let me have a try. I am not sure if it could be done.
> 
> I need to mention here the AMX-TRANSPOSE related inst only got two operands.
> There are no types[2] here. Then you have to use types[1] in switch. However, we
> could not distinguish the original AVX512-VP2INTERSECT and AVX512_4FMAPS with
> types[1].

No, that wasn't the (implied) intention. Instead I was assuming you would
simply check the _last_ operand uniformly (i.e. i.types[i.operands - 1]).

Jan


More information about the Binutils mailing list