[PATCH 1/3] Support APX CCMP and CTEST

Jan Beulich jbeulich@suse.com
Fri Jun 14 06:21:28 GMT 2024


On 14.06.2024 05:29, Cui, Lili wrote:
>>>>> @@ -1929,6 +1939,114 @@ static INLINE bool need_evex_encoding
>>>>> +  /* Parse 'of , sf, zf, cf}'.  */
>>>>> +  while (*suffix_string)
>>>>> +    {
>>>>> +      if (*suffix_string == ',' || is_space_char (*suffix_string))
>>>>> +	suffix_string++;
>>>>
>>>> Like for the earlier loop in the earlier version: Is it really okay
>>>> to have multiple successive commas (with or without whitespace in
>> between)?
>>>
>>> Ok, I'll add a check for it.
>>
>> It's not really another check that's needed. When put at the bottom of the
>> loop body, your expectation simply is to find a brace or a comma. Anything
>> else is an error. (That way "{dfv=,cf}" would then also be properly
>> rejected.)
>>
> 
> I don't understand the logic of your approach, I think I missed some information. Currently I am using the following method to implement it.
> 
> bool check_comma = true;
> 
>   while (*suffix_string)
>     {
>       if (*suffix_string == ',')
>         {
>           /* Report an error for illegal commas.  */
>           if (check_comma == true)
>             {
>               as_bad (_("Illegal comma found in pseudo-suffix"));
>               return -1;
>             }
>           check_comma = true;
>           suffix_string++;
>         }
>       else if (is_space_char (*suffix_string))
>         suffix_string++;
>       else if (*suffix_string == '}')
>         {
>           suffix_string++;
>           return suffix_string - l;
>         }
>       else
>         {
>           check_comma = false;
>           ...
>           suffix_string += 2;
>         }
>     }

(just an outline)

  while (*suffix_string)
    {
      if (is_space_char (*suffix_string))
        suffix_string++;
      if (TOLOWER (suffix_string[1]) != 'f')
        break;
      ...
      suffix_string += 2;

      if (is_space_char (*suffix_string))
        suffix_string++;
      if (*suffix_string == '}')
        return suffix_string + 1 - l;
      if (*suffix_string != ',')
        break;
      suffix_string++;
    }

  as_bad (...);
  return NULL;

The only special case not covered (perhaps needing an extra check ahead
of the loop) is "{dfv=}", which I have to admit I'm not entirely certain
needs supporting at all (for being the same as omitting the construct
altogether). Yet I'm certainly okay to permit it, allowing people to
write what some may call more explicit code.

Jan


More information about the Binutils mailing list