powerpc/setjmp: Fix 64-bit buffer alignment

The rlwinm is a word-size instruction which clears the remaining 32 bits of a
64-bit register.  Use clrrdi in 64-bit configurations.
This commit is contained in:
Sebastian Huber 2022-11-07 14:33:42 +01:00
parent 59b8ee7d70
commit 5c79aa4b22
1 changed files with 16 additions and 0 deletions

View File

@ -8,11 +8,19 @@
FUNC_START(setjmp) FUNC_START(setjmp)
#ifdef __ALTIVEC__ #ifdef __ALTIVEC__
addi 3,3,15 # align Altivec to 16 byte boundary addi 3,3,15 # align Altivec to 16 byte boundary
#if __powerpc64__
clrrdi 3,3,4
#else
rlwinm 3,3,0,0,27 rlwinm 3,3,0,0,27
#endif
#else #else
addi 3,3,7 # align to 8 byte boundary addi 3,3,7 # align to 8 byte boundary
#if __powerpc64__
clrrdi 3,3,3
#else
rlwinm 3,3,0,0,28 rlwinm 3,3,0,0,28
#endif #endif
#endif
#if __SPE__ #if __SPE__
/* If we are E500, then save 64-bit registers. */ /* If we are E500, then save 64-bit registers. */
evstdd 1,0(3) # offset 0 evstdd 1,0(3) # offset 0
@ -193,11 +201,19 @@ FUNC_END(setjmp)
FUNC_START(longjmp) FUNC_START(longjmp)
#ifdef __ALTIVEC__ #ifdef __ALTIVEC__
addi 3,3,15 # align Altivec to 16 byte boundary addi 3,3,15 # align Altivec to 16 byte boundary
#if __powerpc64__
clrrdi 3,3,4
#else
rlwinm 3,3,0,0,27 rlwinm 3,3,0,0,27
#endif
#else #else
addi 3,3,7 # align to 8 byte boundary addi 3,3,7 # align to 8 byte boundary
#if __powerpc64__
clrrdi 3,3,3
#else
rlwinm 3,3,0,0,28 rlwinm 3,3,0,0,28
#endif #endif
#endif
#if __SPE__ #if __SPE__
/* If we are E500, then restore 64-bit registers. */ /* If we are E500, then restore 64-bit registers. */
evldd 1,0(3) # offset 0 evldd 1,0(3) # offset 0