Ping!

please review.

Thanks & Regards
Jeevitha


On 17/04/24 2:44 pm, jeevitha wrote:
> Ping!
> 
> I've incorporated all the suggested changes. Please review.
> 
> Thanks & Regards
> Jeevitha
> 
> On 21/03/24 6:21 pm, jeevitha wrote:
>> Hi All,
>>
>> The following patch has been bootstrapped and regtested on powerpc64le-linux.
>>
>> PTImode assists in generating even/odd register pairs on 128 bits. When the 
>> user 
>> specifies PTImode as an attribute, it breaks because there is no internal 
>> type 
>> to handle this mode. To address this, we have created a tree node with dummy 
>> type
>> to handle PTImode. We are not documenting this dummy type since users are not
>> allowed to use this type externally.
>>
>> 2024-03-21  Jeevitha Palanisamy  <jeevi...@linux.ibm.com>
>>
>> gcc/
>>      PR target/110411
>>      * config/rs6000/rs6000.h (enum rs6000_builtin_type_index): Add
>>      RS6000_BTI_INTPTI.
>>      * config/rs6000/rs6000-builtin.cc (rs6000_init_builtins): Add node
>>      for PTImode type.
>>
>> gcc/testsuite/
>>      PR target/106895
>>      * gcc.target/powerpc/pr106895.c: New testcase.
>>
>> diff --git a/gcc/config/rs6000/rs6000-builtin.cc 
>> b/gcc/config/rs6000/rs6000-builtin.cc
>> index 6698274031b..f553c72779e 100644
>> --- a/gcc/config/rs6000/rs6000-builtin.cc
>> +++ b/gcc/config/rs6000/rs6000-builtin.cc
>> @@ -756,6 +756,15 @@ rs6000_init_builtins (void)
>>    else
>>      ieee128_float_type_node = NULL_TREE;
>>  
>> +  /* PTImode to get even/odd register pairs.  */
>> +  intPTI_type_internal_node = make_node(INTEGER_TYPE);
>> +  TYPE_PRECISION (intPTI_type_internal_node) = GET_MODE_BITSIZE (PTImode);
>> +  layout_type (intPTI_type_internal_node);
>> +  SET_TYPE_MODE (intPTI_type_internal_node, PTImode);
>> +  t = build_qualified_type (intPTI_type_internal_node, TYPE_QUAL_CONST);
>> +  lang_hooks.types.register_builtin_type (intPTI_type_internal_node,
>> +                                      "__dummypti");
>> +
>>    /* Vector pair and vector quad support.  */
>>    vector_pair_type_node = make_node (OPAQUE_TYPE);
>>    SET_TYPE_MODE (vector_pair_type_node, OOmode);
>> diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
>> index 68bc45d65ba..b6078077b20 100644
>> --- a/gcc/config/rs6000/rs6000.h
>> +++ b/gcc/config/rs6000/rs6000.h
>> @@ -2302,6 +2302,7 @@ enum rs6000_builtin_type_index
>>    RS6000_BTI_ptr_vector_quad,
>>    RS6000_BTI_ptr_long_long,
>>    RS6000_BTI_ptr_long_long_unsigned,
>> +  RS6000_BTI_INTPTI,
>>    RS6000_BTI_MAX
>>  };
>>  
>> @@ -2346,6 +2347,7 @@ enum rs6000_builtin_type_index
>>  #define uintDI_type_internal_node    
>> (rs6000_builtin_types[RS6000_BTI_UINTDI])
>>  #define intTI_type_internal_node     
>> (rs6000_builtin_types[RS6000_BTI_INTTI])
>>  #define uintTI_type_internal_node    
>> (rs6000_builtin_types[RS6000_BTI_UINTTI])
>> +#define intPTI_type_internal_node    
>> (rs6000_builtin_types[RS6000_BTI_INTPTI])
>>  #define float_type_internal_node     
>> (rs6000_builtin_types[RS6000_BTI_float])
>>  #define double_type_internal_node    
>> (rs6000_builtin_types[RS6000_BTI_double])
>>  #define long_double_type_internal_node       
>> (rs6000_builtin_types[RS6000_BTI_long_double])
>> diff --git a/gcc/testsuite/gcc.target/powerpc/pr106895.c 
>> b/gcc/testsuite/gcc.target/powerpc/pr106895.c
>> new file mode 100644
>> index 00000000000..56547b7fa9d
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/powerpc/pr106895.c
>> @@ -0,0 +1,15 @@
>> +/* PR target/106895 */
>> +/* { dg-require-effective-target int128 } */
>> +/* { dg-options "-O2" } */
>> +
>> +/* Verify the following generates even/odd register pairs.  */
>> +
>> +typedef __int128 pti __attribute__((mode(PTI)));
>> +
>> +void
>> +set128 (pti val, pti *mem)
>> +{
>> +    asm("stq %1,%0" : "=m"(*mem) : "r"(val));
>> +}
>> +
>> +/* { dg-final { scan-assembler "stq \[123\]?\[02468\]" } } */
>>
>>

Reply via email to