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\]" } } */ >> >>