From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1921) id 64E013858439; Thu, 10 Nov 2022 15:06:52 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 64E013858439 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1668092812; bh=J1Z1mOWoOgbJpffMysFXX7wHMxrrBSnoqSnwbXg0l7Y=; h=From:To:Subject:Date:From; b=G0LuXMESikus/oMpS433QeZFaa9ww/jyEenp4CQ3bLHAwcHr4pf071A632C78NhwM 4BIssb1sBmdlL0i+eIxXwpYtfdSqGImVu9Pt5xlCBpVDZqmup6l83bIOAAu449aM5j /IDdZjSRB2UP6MAp7Ff6YfHWYCCi/v3lzemwFdho= Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Sebastian Huber To: newlib-cvs@sourceware.org Subject: [newlib-cygwin] powerpc/setjmp: Fix 64-bit buffer alignment X-Act-Checkin: newlib-cygwin X-Git-Author: Sebastian Huber X-Git-Refname: refs/heads/master X-Git-Oldrev: 59b8ee7d7066b9a3f39e1c765d0cecb5d9bc07fd X-Git-Newrev: 5c79aa4b22df09b6fb3e97538fee7f108f9fd768 Message-Id: <20221110150652.64E013858439@sourceware.org> Date: Thu, 10 Nov 2022 15:06:52 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=3Dnewlib-cygwin.git;h=3D5c79aa4b22d= f09b6fb3e97538fee7f108f9fd768 commit 5c79aa4b22df09b6fb3e97538fee7f108f9fd768 Author: Sebastian Huber Date: Mon Nov 7 14:33:42 2022 +0100 powerpc/setjmp: Fix 64-bit buffer alignment =20 The rlwinm is a word-size instruction which clears the remaining 32 bit= s of a 64-bit register. Use clrrdi in 64-bit configurations. Diff: --- 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/pow= erpc/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