This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
GCC-SH: more regmove weakness
- To: gcc-bugs at gcc dot gnu dot org
- Subject: GCC-SH: more regmove weakness
- From: Toshi Morita <tm2 at best dot com>
- Date: Mon, 16 Oct 2000 17:45:41 -0700 (PDT)
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