http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13423



Oleg Endo <olegendo at gcc dot gnu.org> changed:



           What    |Removed                     |Added

----------------------------------------------------------------------------

                 CC|                            |olegendo at gcc dot gnu.org



--- Comment #3 from Oleg Endo <olegendo at gcc dot gnu.org> 2013-03-09 15:07:11 
UTC ---

Although this is an ABI issue, passing float vector by reference should not

actually suffer from this problem, but it does:



typedef float v4sf __attribute__ ((vector_size (16)));



void test00 (v4sf& a, const v4sf& b)

{

  a += b; 

}



compiled with '-O2 -m4-single -ml' (rev 196483) results in:



        mov.l   @r5,r1

        mov     #4,r0

        fmov.s  @r4,fr5

        lds     r1,fpul

        mov.l   @(4,r5),r1

        fsts    fpul,fr4

        fadd    fr5,fr4

        lds     r1,fpul

        mov.l   @(8,r5),r1

        fsts    fpul,fr3

        lds     r1,fpul

        mov.l   @(12,r5),r1

        fmov.s  @(r0,r4),fr5

        mov     #8,r0

        fsts    fpul,fr2

        lds     r1,fpul

        fadd    fr5,fr3

        fsts    fpul,fr1

        flds    fr4,fpul

        sts     fpul,r1

        fmov.s  @(r0,r4),fr5

        mov     #12,r0

        flds    fr3,fpul

        fadd    fr5,fr2

        fmov.s  @(r0,r4),fr5

        mov.l   r1,@r4

        sts     fpul,r1

        fadd    fr5,fr1

        flds    fr2,fpul

        mov.l   r1,@(4,r4)

        sts     fpul,r1

        flds    fr1,fpul

        mov.l   r1,@(8,r4)

        sts     fpul,r1

        rts

        mov.l   r1,@(12,r4)



ideally, this would be something like (no insn scheduling applied):



        fmov.s  @r4+,fr0

        fmov.s  @r4+,fr1

        fmov.s  @r4+,fr2

        fmov.s  @r4+,fr3



        fmov.s  @r5+,fr4

        fmov.s  @r5+,fr5

        fmov.s  @r5+,fr6

        fmov.s  @r5+,fr7



        fadd    fr4,fr0

        fadd    fr5,fr1

        fadd    fr6,fr2

        fadd    fr7,fr3



        fmov.s  fr3,@-r4

        fmov.s  fr2,@-r4

        fmov.s  fr1,@-r4

        fmov.s  fr0,@-r4

Reply via email to