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

Reply via email to