Calling an ARM-targeted GCC 3.4.4 on the testsuite file gcc.dg/pr21255-2-mb.c results in "internal compiler error: in shift_op, at config/arm/arm.c:7917".
A slightly reduced version of the file is: double d; double f (void) { double r; asm ("mov %S1,%S0; mov %R1,%R0" : "=&r" (r) : "m" (d)); return r; } The relevant source seems to be: if (GET_CODE (XEXP (op, 1)) == REG || GET_CODE (XEXP (op, 1)) == SUBREG) *amountp = -1; else if (GET_CODE (XEXP (op, 1)) == CONST_INT) *amountp = INTVAL (XEXP (op, 1)); else abort (); CodeSourcery versions 3.4.4 (release) (CodeSourcery ARM 2005q3-2) and 2006q1/4.1.0 give a similar error. x86 GCC 3.3.5 (Debian 1:3.3.5-8ubuntu2), and a checking=all build of 4.1.0 instead give an apparently reasonable rejection message: "error: invalid `asm': invalid operand code `R'". ================ Here's the session; I'll attach the preprocessed source. 48> /opt/crosstool/gcc-3.4.4-glibc-2.3.5/armv5te-softfloat-linux-gnu/bin/armv5te-softfloat-linux-gnu-gcc -v -save-temps /opt/Gcc-4.1.0-dist/gcc/testsuite/gcc.dg/pr21255-2-mb.c Reading specs from /home/opt/crosstool/gcc-3.4.4-glibc-2.3.5/armv5te-softfloat-linux-gnu/bin/../lib/gcc/armv5te-softfloat-linux-gnu/3.4.4/specs Configured with: /home/kenneth.albanowski/projects/dev/open-source/crosstool/main/dist/build/armv5te-softfloat-linux-gnu/gcc-3.4.4-glibc-2.3.5/gcc-3.4.4/configure --target=armv5te-softfloat-linux-gnu --host=i686-host_pc-linux-gnu --prefix=/opt/crosstool/gcc-3.4.4-glibc-2.3.5/armv5te-softfloat-linux-gnu --with-float=soft --with-arch=armv5te --enable-cxx-flags=-march=armv5te --with-headers=/opt/crosstool/gcc-3.4.4-glibc-2.3.5/armv5te-softfloat-linux-gnu/armv5te-softfloat-linux-gnu/include --with-local-prefix=/opt/crosstool/gcc-3.4.4-glibc-2.3.5/armv5te-softfloat-linux-gnu/armv5te-softfloat-linux-gnu --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable-languages=c,c++ --enable-shared --enable-c99 --enable-long-long Thread model: posix gcc version 3.4.4 /home/opt/crosstool/gcc-3.4.4-glibc-2.3.5/armv5te-softfloat-linux-gnu/bin/../libexec/gcc/armv5te-softfloat-linux-gnu/3.4.4/cc1 -E -quiet -v -iprefix /home/opt/crosstool/gcc-3.4.4-glibc-2.3.5/armv5te-softfloat-linux-gnu/bin/../lib/gcc/armv5te-softfloat-linux-gnu/3.4.4/ -D__ARM_ARCH_5TE__ /opt/Gcc-4.1.0-dist/gcc/testsuite/gcc.dg/pr21255-2-mb.c -march=armv5te -msoft-float -o pr21255-2-mb.i ignoring duplicate directory "/opt/crosstool/gcc-3.4.4-glibc-2.3.5/armv5te-softfloat-linux-gnu/lib/gcc/armv5te-softfloat-linux-gnu/3.4.4/include" ignoring duplicate directory "/opt/crosstool/gcc-3.4.4-glibc-2.3.5/armv5te-softfloat-linux-gnu/lib/gcc/armv5te-softfloat-linux-gnu/3.4.4/../../../../armv5te-softfloat-linux-gnu/sys-include" ignoring duplicate directory "/opt/crosstool/gcc-3.4.4-glibc-2.3.5/armv5te-softfloat-linux-gnu/lib/gcc/armv5te-softfloat-linux-gnu/3.4.4/../../../../armv5te-softfloat-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: /home/opt/crosstool/gcc-3.4.4-glibc-2.3.5/armv5te-softfloat-linux-gnu/bin/../lib/gcc/armv5te-softfloat-linux-gnu/3.4.4/include /home/opt/crosstool/gcc-3.4.4-glibc-2.3.5/armv5te-softfloat-linux-gnu/bin/../lib/gcc/armv5te-softfloat-linux-gnu/3.4.4/../../../../armv5te-softfloat-linux-gnu/sys-include /home/opt/crosstool/gcc-3.4.4-glibc-2.3.5/armv5te-softfloat-linux-gnu/bin/../lib/gcc/armv5te-softfloat-linux-gnu/3.4.4/../../../../armv5te-softfloat-linux-gnu/include End of search list. /home/opt/crosstool/gcc-3.4.4-glibc-2.3.5/armv5te-softfloat-linux-gnu/bin/../libexec/gcc/armv5te-softfloat-linux-gnu/3.4.4/cc1 -fpreprocessed pr21255-2-mb.i -quiet -dumpbase pr21255-2-mb.c -march=armv5te -msoft-float -auxbase pr21255-2-mb -version -o pr21255-2-mb.s GNU C version 3.4.4 (armv5te-softfloat-linux-gnu) compiled by GNU C version 3.3.5 (Debian 1:3.3.5-8ubuntu2). GGC heuristics: --param ggc-min-expand=63 --param ggc-min-heapsize=62500 /opt/Gcc-4.1.0-dist/gcc/testsuite/gcc.dg/pr21255-2-mb.c: In function `f': /opt/Gcc-4.1.0-dist/gcc/testsuite/gcc.dg/pr21255-2-mb.c:19: internal compiler error: in shift_op, at config/arm/arm.c:7917 Please submit a full bug report, with preprocessed source if appropriate. See <URL:http://gcc.gnu.org/bugs.html> for instructions. -- Summary: ICE/abort in shift_op, at config/arm/arm.c:7917 with asm from testsuite/gcc.dg/pr21255-2-mb.c Product: gcc Version: 3.4.4 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: flash at pobox dot com GCC target triplet: armv5te-softfloat-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27829