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