We have a problem while using a gcc cross-compiler for our processor to compile one of our uClinux applications like mp3player. We used gcc 2.95.3 version to port. The ported one is throwing an error . This is the error report:- make[3]: Entering directory `/home/new/driver_testing/uClinux-dist/user/mp3play/mpegdec_lib' nisa-elf-gcc -DCONFIG_FRIO -O0 -g -Dlinux -D__linux__ -Dunix -D__uClinux__ -DEMBED -I/home/new/driver_testing/uClinux-dist/lib/uClibc/include -I/home/new/driver_testing/uClinux-dist/lib/libm -I/home/new/driver_testing/uClinux-dist -fno-builtin -nostartfiles -I/home/new/driver_testing/uClinux-dist/linux-2.4.x/include -Impegdec_lib -DMPEGAUD_INT -Irc4 -DMPEGAUD_INT -DSPLIT_TABLE -DUSE_IMDCT_TABLE -g -O1 -c -o mpeg3dec.o mpeg3dec.c mpeg3dec.c: In function `MPEG3_dequantize_samples': mpeg3dec.c:864: internal error--insn does not satisfy its constraints: (insn 719 1800 1806 (set (reg:SI 9 P1) (plus:SI (mult:SI (reg:SI 1 R1) (const_int 4 [0x4])) (reg:SI 9 P1))) 53 {umulhisi3-4} (insn_list 716 (insn_list 708 (nil))) (nil)) make[3]: *** [mpeg3dec.o] Error 1 Our analysis on the problem is as follows: An instruction of the type "p1 = R1*4 + p1" is being used here. The operation between data registers and pointer registers are not allowed in our target. Why is it happening here ? How the wrong class of registers are allocated here? This problem is vanished when we use no optimization. But if we use optimization -O1 it is coming. So Could anyone help me out? The .md file is attached along with this mail. Thx in advance Ashwani.
Attachment:
nisa.md
Description: audio/md