Re: [PATCH] aarch64, acle header: Cast uint64_t pointers to DIMode.
Iain Sandoe writes: >> On 15 Feb 2024, at 18:05, Richard Sandiford >> wrote: >> >> Iain Sandoe writes: On 5 Feb 2024, at 14:56, Iain Sandoe wrote: Tested on aarch64-linux,darwin and a cross from aarch64-darwin to linux, OK for trunk, or some alternative is needed? >>> >>> Hmm.. apparently, this fails the linaro pre-commit CI for g++ with: >>> error: invalid conversion from 'long int*' to 'long unsigned int*' >>> [-fpermissive] >>> >>> So, I guess some alternative is needed, advice welcome, >> >> The builtins are registered with: >> >> static void >> aarch64_init_rng_builtins (void) >> { >> tree unsigned_ptr_type = build_pointer_type (unsigned_intDI_type_node); >> ... >> >> Does it work if you change unsigned_intDI_type_node to >> get_typenode_from_name (UINT64_TYPE)? > > Yes, that works fine; tested on aarch64-linux and aarch64-darwin. > > revised, as below, > OK for trunk? > Iain > > > Subject: [PATCH] aarch64: Register rng builtins with uint64_t pointers. > > Currently, these are registered as unsigned_intDI_type_node which is not > necessarily the same type definition as uint64_t. On platforms where these > differ that causes fails in consuming the arm_acle.h header. > > gcc/ChangeLog: > > * config/aarch64/aarch64-builtins.cc (aarch64_init_rng_builtins): > Register these builtins with a pointer to uint64_t rather than unsigned > DI mode. OK, thanks. Richard > --- > gcc/config/aarch64/aarch64-builtins.cc | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/gcc/config/aarch64/aarch64-builtins.cc > b/gcc/config/aarch64/aarch64-builtins.cc > index e211a7271ba..1330558f109 100644 > --- a/gcc/config/aarch64/aarch64-builtins.cc > +++ b/gcc/config/aarch64/aarch64-builtins.cc > @@ -1759,7 +1759,8 @@ aarch64_init_tme_builtins (void) > static void > aarch64_init_rng_builtins (void) > { > - tree unsigned_ptr_type = build_pointer_type (unsigned_intDI_type_node); > + tree unsigned_ptr_type > += build_pointer_type (get_typenode_from_name (UINT64_TYPE)); >tree ftype > = build_function_type_list (integer_type_node, unsigned_ptr_type, NULL); >aarch64_builtin_decls[AARCH64_BUILTIN_RNG_RNDR]
Re: [PATCH] aarch64, acle header: Cast uint64_t pointers to DIMode.
> On 15 Feb 2024, at 18:05, Richard Sandiford wrote: > > Iain Sandoe writes: >>> On 5 Feb 2024, at 14:56, Iain Sandoe wrote: >>> >>> Tested on aarch64-linux,darwin and a cross from aarch64-darwin to linux, >>> OK for trunk, or some alternative is needed? >> >> Hmm.. apparently, this fails the linaro pre-commit CI for g++ with: >> error: invalid conversion from 'long int*' to 'long unsigned int*' >> [-fpermissive] >> >> So, I guess some alternative is needed, advice welcome, > > The builtins are registered with: > > static void > aarch64_init_rng_builtins (void) > { > tree unsigned_ptr_type = build_pointer_type (unsigned_intDI_type_node); > ... > > Does it work if you change unsigned_intDI_type_node to > get_typenode_from_name (UINT64_TYPE)? Yes, that works fine; tested on aarch64-linux and aarch64-darwin. revised, as below, OK for trunk? Iain Subject: [PATCH] aarch64: Register rng builtins with uint64_t pointers. Currently, these are registered as unsigned_intDI_type_node which is not necessarily the same type definition as uint64_t. On platforms where these differ that causes fails in consuming the arm_acle.h header. gcc/ChangeLog: * config/aarch64/aarch64-builtins.cc (aarch64_init_rng_builtins): Register these builtins with a pointer to uint64_t rather than unsigned DI mode. --- gcc/config/aarch64/aarch64-builtins.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gcc/config/aarch64/aarch64-builtins.cc b/gcc/config/aarch64/aarch64-builtins.cc index e211a7271ba..1330558f109 100644 --- a/gcc/config/aarch64/aarch64-builtins.cc +++ b/gcc/config/aarch64/aarch64-builtins.cc @@ -1759,7 +1759,8 @@ aarch64_init_tme_builtins (void) static void aarch64_init_rng_builtins (void) { - tree unsigned_ptr_type = build_pointer_type (unsigned_intDI_type_node); + tree unsigned_ptr_type += build_pointer_type (get_typenode_from_name (UINT64_TYPE)); tree ftype = build_function_type_list (integer_type_node, unsigned_ptr_type, NULL); aarch64_builtin_decls[AARCH64_BUILTIN_RNG_RNDR] -- 2.39.2 (Apple Git-143)
Re: [PATCH] aarch64, acle header: Cast uint64_t pointers to DIMode.
Iain Sandoe writes: >> On 5 Feb 2024, at 14:56, Iain Sandoe wrote: >> >> Tested on aarch64-linux,darwin and a cross from aarch64-darwin to linux, >> OK for trunk, or some alternative is needed? > > Hmm.. apparently, this fails the linaro pre-commit CI for g++ with: > error: invalid conversion from 'long int*' to 'long unsigned int*' > [-fpermissive] > > So, I guess some alternative is needed, advice welcome, The builtins are registered with: static void aarch64_init_rng_builtins (void) { tree unsigned_ptr_type = build_pointer_type (unsigned_intDI_type_node); ... Does it work if you change unsigned_intDI_type_node to get_typenode_from_name (UINT64_TYPE)? Thanks, Richard
Re: [PATCH] aarch64, acle header: Cast uint64_t pointers to DIMode.
> On 5 Feb 2024, at 14:56, Iain Sandoe wrote: > > Tested on aarch64-linux,darwin and a cross from aarch64-darwin to linux, > OK for trunk, or some alternative is needed? Hmm.. apparently, this fails the linaro pre-commit CI for g++ with: error: invalid conversion from 'long int*' to 'long unsigned int*' [-fpermissive] So, I guess some alternative is needed, advice welcome, Iain > thanks > Iain > > --- 8< --- > > Currently, most of the acle tests fail on the Darwin port because > DI mode is "long" and uint64 is "long long". The fix for this used > in other headers is to cast the pointers using __builtin_aarch64_simd_di > and that is what this patch does. > > gcc/ChangeLog: > > * config/aarch64/arm_acle.h (__rndr): Cast uint64 pointer to DI > mode to avoid typedef mismatches. > (__rndrrs): Likewise. > --- > gcc/config/aarch64/arm_acle.h | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/gcc/config/aarch64/arm_acle.h b/gcc/config/aarch64/arm_acle.h > index 2aa681090fa..823f87187b1 100644 > --- a/gcc/config/aarch64/arm_acle.h > +++ b/gcc/config/aarch64/arm_acle.h > @@ -309,14 +309,14 @@ __extension__ extern __inline int > __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) > __rndr (uint64_t *__res) > { > - return __builtin_aarch64_rndr (__res); > + return __builtin_aarch64_rndr ((__builtin_aarch64_simd_di *) __res); > } > > __extension__ extern __inline int > __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) > __rndrrs (uint64_t *__res) > { > - return __builtin_aarch64_rndrrs (__res); > + return __builtin_aarch64_rndrrs ((__builtin_aarch64_simd_di *) __res); > } > > #pragma GCC pop_options > -- > 2.39.2 (Apple Git-143) >