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