yann@1: See http://gcc.gnu.org/PR15089 yann@1: "In some cases the specified register for a local variable meant to be yann@1: used with inline assembly code is not respected. This breaks code yann@1: relying on this feature to implement non-standard calling convension." yann@1: yann@1: This fix is probably needed to properly implement linux syscalls in some architectures. yann@1: yann@1: First added to crosstool by Jamie Hicks, see yann@1: http://www.handhelds.org/hypermail/kernel-discuss/current/0066.html yann@1: yann@1: Index: gcc/loop.c yann@1: =================================================================== yann@1: RCS file: /cvs/gcc/gcc/gcc/loop.c,v yann@1: retrieving revision 1.488.2.3 yann@1: diff -u -r1.488.2.3 loop.c yann@1: --- gcc-old/gcc/loop.c 14 Feb 2004 14:46:03 -0000 1.488.2.3 yann@1: +++ gcc-new/gcc/loop.c 28 Apr 2004 22:02:53 -0000 yann@1: @@ -929,6 +929,7 @@ yann@1: || (! (GET_CODE (SET_SRC (set)) == REG yann@1: && (REGNO (SET_SRC (set)) yann@1: < FIRST_PSEUDO_REGISTER)))) yann@1: + && regno >= FIRST_PSEUDO_REGISTER yann@1: /* This test is not redundant; SET_SRC (set) might be yann@1: a call-clobbered register and the life of REGNO yann@1: might span a call. */