[PATCH] powerpc/setjmp: Fix 64-bit buffer alignment
Sebastian Huber <[email protected]>
| Newsgroups | gmane.comp.lib.newlib |
|---|---|
| Message-ID | <[email protected]> |
The rlwinm is a word-size instruction which clears the remaining 32 bits of a 64-bit register. Use clrrdi in 64-bit configurations. --- 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