Re: [PATCH] powerpc/setjmp: Fix 64-bit buffer alignment

Corinna Vinschen <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <Y2kzSMZUP6/[email protected]>
On Nov  7 16:48, Sebastian Huber wrote:
> The rlwinm is a word-size instruction which clears the remaining 32 bits of a
> 64-bit register.  Use clrrdi in 64-bit configurations.

I'm getting a bit cross-eyed when looling at PowerPC assembler.
I'm sure you tested it, so feel free to push.


Thanks,
Corinna


> ---
>  newlib/libc/machine/powerpc/setjmp.S | 16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
> 
> diff --git a/newlib/libc/machine/powerpc/setjmp.S b/newlib/libc/machine/powerpc/setjmp.S
> index 3a6fa4a58..c7af5b105 100644
> --- a/newlib/libc/machine/powerpc/setjmp.S
> +++ b/newlib/libc/machine/powerpc/setjmp.S
> @@ -8,11 +8,19 @@
>  FUNC_START(setjmp)
>  #ifdef __ALTIVEC__
>  	addi	3,3,15		# align Altivec to 16 byte boundary
> +#if __powerpc64__
> +	clrrdi	3,3,4
> +#else
>  	rlwinm	3,3,0,0,27
> +#endif
>  #else
>  	addi	3,3,7		# align to 8 byte boundary
> +#if __powerpc64__
> +	clrrdi	3,3,3
> +#else
>  	rlwinm	3,3,0,0,28
>  #endif
> +#endif
>  #if __SPE__
>  	/* If we are E500, then save 64-bit registers.  */
>  	evstdd	1,0(3)		# offset 0
> @@ -193,11 +201,19 @@ FUNC_END(setjmp)
>  FUNC_START(longjmp)
>  #ifdef __ALTIVEC__
>  	addi	3,3,15		# align Altivec to 16 byte boundary
> +#if __powerpc64__
> +	clrrdi	3,3,4
> +#else
>  	rlwinm	3,3,0,0,27
> +#endif
>  #else
>  	addi	3,3,7		# align to 8 byte boundary
> +#if __powerpc64__
> +	clrrdi	3,3,3
> +#else
>  	rlwinm	3,3,0,0,28
>  #endif
> +#endif
>  #if __SPE__
>  	/* If we are E500, then restore 64-bit registers.  */
>  	evldd	1,0(3)		# offset 0
> -- 
> 2.35.3
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.