HiDave: I add the DI, SF, DFpattern. But when build the libgcc2.c, it still cause errors. The error information:
../../../rice-gcc-4.3.0/libgcc/../gcc/libgcc2.c: In function '__muldi3': ../../../rice-gcc-4.3.0/libgcc/../gcc/libgcc2.c:557: internal compiler error: in emit_move_insn, at expr.c:3379 Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions. make[2]: *** [_muldi3.o] Error 1 make[2]: Leaving directory `/home/daniel.tian/gcc_rice_dev/rice-binutils/build-gcc/rice-elf/libgcc' make[1]: *** [all-target-libgcc] Error 2 make[1]: Leaving directory `/home/daniel.tian/gcc_rice_dev/rice-binutils/build-gcc' make: *** [all] Error 2 the assert: gcc_assert (mode != BLKmode && (GET_MODE (y) == mode || GET_MODE (y) == VOIDmode)); in function emit_move_insn cause the error. Because the machine mode in rtx x, y are different. X is SImode, while y is DImode. And I hacked the CRX archtechiture, after deleting all patterns about DI, SF, DF, it can still build successful. So I think the error is not caused by the DI pattern. function __muldi3: #ifdef L_muldi3 DWtype __muldi3 (DWtype u, DWtype v) { //<----------------------------this is the line 557, which error info shows. const DWunion uu = {.ll = u}; const DWunion vv = {.ll = v}; DWunion w = {.ll = __umulsidi3 (uu.s.low, vv.s.low)}; w.s.high += ((UWtype) uu.s.low * (UWtype) vv.s.high + (UWtype) uu.s.high * (UWtype) vv.s.low); return w.ll; } #endif Does this mean error occur in argument passing? I just wanna the gcc build successful first. Then make the define_insn/pattern DI/SF/DF right. Can somebody give me some advice? thanks. And another question. If I wanna debug the gcc when build the file libgcc2.c, the command line the build.log is like this: /home/daniel.tian/gcc_rice_dev/rice-binutils/build-gcc/./gcc/xgcc -B/home/daniel.tian/gcc_rice_dev/rice-binutils/build-gcc/./gcc/ -B/usr/local/cross/rice-elf/rice-elf/bin/ -B/usr/local/cross/rice-elf/rice-elf/lib/ -isystem /usr/local/cross/rice-elf/rice-elf/include -isystem /usr/local/cross/rice-elf/rice-elf/sys-include -O2 -g -g -O2 -O2 -O2 -g -g -O2 -DIN_GCC -DCROSS_DIRECTORY_STRUCTURE -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -isystem ./include -g -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED -Dinhibit_libc -I. -I. -I../.././gcc -I../../../rice-gcc-4.3.0/libgcc -I../../../rice-gcc-4.3.0/libgcc/. -I../../../rice-gcc-4.3.0/libgcc/../gcc -I../../../rice-gcc-4.3.0/libgcc/../include -DHAVE_CC_TLS -o _muldi3.o -MT _muldi3.o -MD -MP -MF _muldi3.dep -DL_muldi3 -c ../../../rice-gcc-4.3.0/libgcc/../gcc/libgcc2.c this is huge. but cc1 does not run in this command. I open the xgcc in gdb, it is different from cc1. but run: run -isystem /usr/local/cross/rice-elf/rice-elf/include -isystem /usr/local/cross/rice-elf/rice-elf/sys-include -O2 -g -g -O2 -O2 -O2 -g -g -O2 -DIN_GCC -DCROSS_DIRECTORY_STRUCTURE -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -isystem ./include -g -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED -Dinhibit_libc -I. -I. -I../.././gcc -I../../../rice-gcc-4.3.0/libgcc -I../../../rice-gcc-4.3.0/libgcc/. -I../../../rice-gcc-4.3.0/libgcc/../gcc -I../../../rice-gcc-4.3.0/libgcc/../include -DHAVE_CC_TLS -o _muldi3.o -MT _muldi3.o -MD -MP -MF _muldi3.dep -DL_muldi3 ../../../rice-gcc-4.3.0/libgcc/../gcc/libgcc2.c it can be build and the former error shows again. But I just don't know how to make a break point in emit_move_isn, expr.c. Because the expr.c file doesn't appear in the xgcc file. (I debug it with insight.) So anybody also meet the same problem? and how to slove it. Thank you very much. daniel