This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

GCC-SH: more regmove weakness



   host: i386-linux
 target: sh-elf
version: CVS 10/16/2000

When the file:

#include <stream.h>

class Matrix {

        public:
                Matrix(float v11, float v12, float v13, float v14,
                        float v21, float v22, float v23, float v24,
                        float v31, float v32, float v33, float v34,
                        float v41, float v42, float v43, float v44);
                void dump(void);

        private:

                float value[4][4];
};


Matrix::Matrix(float v11, float v12, float v13, float v14,
               float v21, float v22, float v23, float v24,
               float v31, float v32, float v33, float v34,
               float v41, float v42, float v43, float v44)

{
        value[0][0] = v11;
        value[0][1] = v12;
        value[0][2] = v13;
        value[0][3] = v14;
        value[1][0] = v21;
        value[1][1] = v22;
        value[1][2] = v23;
        value[1][3] = v24;
        value[2][0] = v31;
        value[2][1] = v32;
        value[2][2] = v33;
        value[2][3] = v34;
        value[3][0] = v41;
        value[3][1] = v42;
        value[3][2] = v43;
        value[3][3] = v44;
}

void Matrix::dump(void)

{
        cout << value[0][0] << ' ' << value[0][1] << ' ' << value[0][2] << ' ' << value[0][3] << '\n';
        cout << value[1][0] << ' ' << value[1][1] << ' ' << value[1][2] << ' ' << value[1][3] << '\n';
        cout << value[2][0] << ' ' << value[2][1] << ' ' << value[2][2] << ' ' << value[2][3] << '\n';
        cout << value[3][0] << ' ' << value[3][1] << ' ' << value[3][2] << ' ' << value[3][3] << '\n';
}

void main(void)

{
        Matrix matrix(   0.0f,  1.0f,  2.0f,  3.0f,
                         4.0f,  5.0f,  6.0f,  7.0f,
                         8.0f,  9.0f, 10.0f, 11.0f,
                        12.0f, 13.0f, 14.0f, 15.0f);

        matrix.dump();
}

is compiled with the following options:

sh-elf-g++ -O2 -m4-single-only -ml -S test.cpp

the following code is emitted:

___6Matrixffffffffffffffff:
        mov.l   r14,@-r15
        mov     #20,r2
        fmov.s  fr12,@-r15
        fmov.s  fr13,@-r15
        fmov.s  fr14,@-r15
        fmov.s  fr15,@-r15
        mov     r15,r14
        add     r14,r2
        mov     r2,r1
        fmov.s  @r1+,fr1
        fmov.s  @r1,fr2
        mov     r14,r1
        add     #28,r1
        fmov.s  @r1,fr3		<- failed to generate post-increment
        add     #4,r1
        fmov.s  @r1,fr0		<- ditto
        add     #4,r1
        fmov.s  @r1,fr12	<- ditto
        add     #4,r1
        fmov.s  @r1,fr13	<- ditto
        add     #4,r1
        fmov.s  @r1,fr14	<- ditto
        add     #4,r1
        fmov.s  @r1,fr15	<- ditto
        fmov.s  fr4,@r4
        add     #4,r4
...

Toshi


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]