Hi Eric,

on 2024/6/3 17:02, Eric Botcazou wrote:
>>      * config/sparc/sparc.cc (sparc_c_mode_for_floating_type): New
>>      (TARGET_C_MODE_FOR_FLOATING_TYPE): New macro.
>>      (FLOAT_TYPE_SIZE): Remove.
>>      (DOUBLE_TYPE_SIZE): Likewise.
>>      (LONG_DOUBLE_TYPE_SIZE): Rename to ...
>>      (SPARC_LONG_DOUBLE_TYPE_SIZE): ... this.
>>      (sparc_type_code): Replace FLOAT_TYPE_SIZE with TYPE_PRECISION of
>>      float_type_node.
>>      * config/sparc/sparc.h (FLOAT_TYPE_SIZE): Remove.
>>      (DOUBLE_TYPE_SIZE): Remove.
>>      * config/sparc/freebsd.h (LONG_DOUBLE_TYPE_SIZE): Rename to ...
>>      (SPARC_LONG_DOUBLE_TYPE_SIZE): ... this.
>>      * config/sparc/linux.h (LONG_DOUBLE_TYPE_SIZE): Rename to ...
>>      (SPARC_LONG_DOUBLE_TYPE_SIZE): ... this.
>>      * config/sparc/linux64.h (LONG_DOUBLE_TYPE_SIZE): Rename to ...
>>      (SPARC_LONG_DOUBLE_TYPE_SIZE): ... this.
>>      * config/sparc/netbsd-elf.h (LONG_DOUBLE_TYPE_SIZE): Rename to ...
>>      (SPARC_LONG_DOUBLE_TYPE_SIZE): ... this.
>>      * config/sparc/openbsd64.h (LONG_DOUBLE_TYPE_SIZE): Rename to ...
>>      (SPARC_LONG_DOUBLE_TYPE_SIZE): ... this.
>>      * config/sparc/sol2.h (LONG_DOUBLE_TYPE_SIZE): Rename to ...
>>      (SPARC_LONG_DOUBLE_TYPE_SIZE): ... this.
>>      * config/sparc/sp-elf.h (LONG_DOUBLE_TYPE_SIZE): Rename to ...
>>      (SPARC_LONG_DOUBLE_TYPE_SIZE): ... this.
>>      * config/sparc/sp64-elf.h (LONG_DOUBLE_TYPE_SIZE): Rename to ...
>>      (SPARC_LONG_DOUBLE_TYPE_SIZE): ... this.
> 
> OK, modulo the following tweaks:

Thanks for the review!

> 
>> --- a/gcc/config/sparc/sparc.cc
>> +++ b/gcc/config/sparc/sparc.cc
>> @@ -718,6 +718,7 @@ static bool sparc_vectorize_vec_perm_const
>> (machine_mode, machine_mode, const vec_perm_indices &);
>>  static bool sparc_can_follow_jump (const rtx_insn *, const rtx_insn *);
>>  static HARD_REG_SET sparc_zero_call_used_regs (HARD_REG_SET);
>> +static machine_mode sparc_c_mode_for_floating_type (enum tree_index);
>>  
>>  #ifdef SUBTARGET_ATTRIBUTE_TABLE
>>  /* Table of valid machine attributes.  */
>> @@ -971,6 +972,9 @@ char sparc_hard_reg_printed[8];
>>  #undef TARGET_ZERO_CALL_USED_REGS
>>  #define TARGET_ZERO_CALL_USED_REGS sparc_zero_call_used_regs
>>
>> +#undef TARGET_C_MODE_FOR_FLOATING_TYPE
>> +#define TARGET_C_MODE_FOR_FLOATING_TYPE sparc_c_mode_for_floating_type
>> +
>>  struct gcc_target targetm = TARGET_INITIALIZER;
>>
>>  /* Return the memory reference contained in X if any, zero otherwise.  */
>> @@ -9824,16 +9828,9 @@ sparc_assemble_integer (rtx x, unsigned int size, int
>> aligned_p) #define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
>>  #endif
>>
>> -#ifndef FLOAT_TYPE_SIZE
>> -#define FLOAT_TYPE_SIZE BITS_PER_WORD
>> -#endif
>> -
>> -#ifndef DOUBLE_TYPE_SIZE
>> -#define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
>> -#endif
>> -
>> -#ifndef LONG_DOUBLE_TYPE_SIZE
>> -#define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
>> +/* LONG_DOUBLE_TYPE_SIZE get poisoned, so add SPARC_ prefix.  */
>> +#ifndef SPARC_LONG_LONG_TYPE_SIZE
>> +#define SPARC_LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
>>  #endif
>>
>>  unsigned long
> 
> You can delete {SPARC_}LONG_DOUBLE_TYPE_SIZE too.

Good point, sparc.h already defines the default.

> 
>> @@ -9920,7 +9917,7 @@ sparc_type_code (tree type)
>>        /* Carefully distinguish all the standard types of C,
>>           without messing up if the language is not C.  */
>>
>> -      if (TYPE_PRECISION (type) == FLOAT_TYPE_SIZE)
>> +      if (TYPE_PRECISION (type) == TYPE_PRECISION (float_type_node))
>>          return (qualifiers | 6);
>>
>>        else
>> @@ -13984,4 +13981,16 @@ sparc_zero_call_used_regs (HARD_REG_SET
>> need_zeroed_hardregs) return need_zeroed_hardregs;
>>  }
>>
>> +/* Implement TARGET_C_MODE_FOR_FLOATING_TYPE.  Return TFmode or DFmode
>> +   for TI_LONG_DOUBLE_TYPE which is for long double type, go with the
>> +   default one for the others.  */
>> +
>> +static machine_mode
>> +sparc_c_mode_for_floating_type (enum tree_index ti)
>> +{
>> +  if (ti == TI_LONG_DOUBLE_TYPE)
>> +    return SPARC_LONG_DOUBLE_TYPE_SIZE == 128 ? TFmode : DFmode;
>> +  return default_mode_for_floating_type (ti);
>> +}
>> +
>>  #include "gt-sparc.h"
> 
> I think that TI_LONG_DOUBLE_TYPE is self-explanatory so just:
> 
> /* Implement TARGET_C_MODE_FOR_FLOATING_TYPE.  Return TFmode or DFmode
>    for TI_LONG_DOUBLE_TYPE and the default for others.
> 

Will adjust it, thanks!

BR,
Kewen

Reply via email to