SPARC V9 backend generates bad fmovd instrunction.
Casper Dik
casper@holland.Sun.COM
Mon Nov 2 04:08:00 GMT 1998
In snaphot 19981101, the SPARC backend generates invalid assembly
instructions (this is using SPARC_BI_ARCH on Solaris 7),
the error message are this:
/export/data/src/tmp/egcs-19981101-obj/gcc/xgcc -B/export/data/src/tmp/egcs-19981101-obj/gcc/ -B/usr/local/gnu/sparc-sun-solaris2/bin/ -c -g -O2 -fno-implicit-templates -m64 -I/export/data/src/tmp/egcs-19981101-dev/libstdc++ -I/export/data/src/tmp/egcs-19981101-dev/libstdc++/stl -I../libio -I/export/data/src/tmp/egcs-19981101-dev/libstdc++/../libio -nostdinc++ -DLD `for N in MAIN ADDCC ADDCF ADDFC SUBCC SUBCF SUBFC MULCC MULCF MULFC DIVCC DIVCF DIVFC PLUS MINUS EQCC EQCF EQFC NECC NECF NEFC ABS ARG POLAR CONJ NORM COS COSH EXP LOG POWCC POWCF POWCI POWFC SIN SINH SQRT; do echo " -D${N}"; done` \
/export/data/src/tmp/egcs-19981101-dev/libstdc++/cinst.cc -o ldcomplex.o
/usr/ccs/bin/as: "/tmp/ccmW3yVB.s", line 245: error: invalid (misaligned) register
/usr/ccs/bin/as: "/tmp/ccmW3yVB.s", line 310: error: invalid (misaligned) register
/usr/ccs/bin/as: "/tmp/ccmW3yVB.s", line 681: error: invalid (misaligned) register
/usr/ccs/bin/as: "/tmp/ccmW3yVB.s", line 801: error: invalid (misaligned) register
/usr/ccs/bin/as: "/tmp/ccmW3yVB.s", line 1170: error: invalid (misaligned) register
/usr/ccs/bin/as: "/tmp/ccmW3yVB.s", line 1356: error: invalid (misaligned) register
/usr/ccs/bin/as: "/tmp/ccmW3yVB.s", line 1412: error: invalid (misaligned) register
/usr/ccs/bin/as: "/tmp/ccmW3yVB.s", line 2040: error: invalid (misaligned) register
/usr/ccs/bin/as: "/tmp/ccmW3yVB.s", line 4364: error: invalid (misaligned) register
/usr/ccs/bin/as: "/tmp/ccmW3yVB.s", line 6802: error: invalid (misaligned) register
gmake[3]: *** [bigstmp-complx] Error 1
gmake[3]: Leaving directory `/export/data/src/tmp/egcs-19981101-obj/sparc-sun-solaris2/sparcv9/libstdc++'
The invalid code is:
245 fmovd %f1, %f6
310 fmovd %f1, %f6
681 fmovd %f1, %f6
801 fmovd %f1, %f6
1170 fmovd %f1, %f6
1356 fmovd %f1, %f6
1412 fmovd %f9, %f2
2040 fmovd %f5, %f2
4364 fmovd %f9, %f2
6802 fmovd %f5, %f2
These are move double instructions; they require double width alignment
in SPARC v9.
In SPARC v8, these intructions don't exist either. Instead, they're
implemented as series of fmovs and fmovd (unaligned) is a pseudo op.
It would appear, though, that these instructions are indicative of a more
serious error.
Casper
More information about the Gcc-bugs
mailing list