https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67732
--- Comment #4 from Oleg Endo <olegendo at gcc dot gnu.org> --- (In reply to Kazumoto Kojima from comment #2) > > void > foo (float mat[]) > { > float *p = &mat[16]; > > *--p = 0.0; *--p = 0.0; *--p = 0.0; *--p = 0.0; > *--p = 0.0; *--p = 0.0; *--p = 0.0; *--p = 0.0; > } > I've just checked this example on the AMS branch.. Without AMS (compiled with -m4-single -ml -O2): _foo: mov r4,r1 add #60,r1 fldi0 fr1 add #32,r4 fmov.s fr1,@r1 add #-4,r1 fmov.s fr1,@r1 add #-4,r1 fmov.s fr1,@r1 add #-4,r1 fmov.s fr1,@r1 add #-4,r1 fmov.s fr1,@r1 add #-4,r1 fmov.s fr1,@r1 add #-4,r1 fmov.s fr1,@r1 rts fmov.s fr1,@r4 With AMS: add #60,r4 fldi0 fr1 fmov.s fr1,@r4 mov r4,r1 fmov.s fr1,@-r1 fmov.s fr1,@-r1 fmov.s fr1,@-r1 fmov.s fr1,@-r1 fmov.s fr1,@-r1 fmov.s fr1,@-r1 rts fmov.s fr1,@-r1 Not perfect (because of mov r4,r1), but better