------- Comment #9 from dje at gcc dot gnu dot org 2008-01-22 15:59 ------- GCC does not use the load and store multiple instructions because the source file declares r29 a global variable:
register volatile gd_t *gd asm ("r29"); The bug fix mentioned above inhibits GCC from using lmw/stmw if global registers are present in the contiguous register sequence because GCC incorrectly would overwrite the register. If the register variable declaration is removed, GCC uses the lmw/stmw instructions. r29 is a bad choice for a global register variable. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34903