gcc-4.1 -v -save-temps -msse2 gnu_bug_test.c Using built-in specs. Target: i586-suse-linux Configured with: ../configure --enable-threads=posix --prefix=/usr --with-local-prefix=/usr/local --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib --libexecdir=/usr/lib --enable-languages=c,c++,objc,fortran,obj-c++,java,ada --enable-checking=release --with-gxx-include-dir=/usr/include/c++/4.1.3 --enable-ssp --disable-libssp --disable-libgcj --with-slibdir=/lib --with-system-zlib --enable-shared --enable-__cxa_atexit --enable-libstdcxx-allocator=new --program-suffix=-4.1 --enable-version-specific-runtime-libs --without-system-libunwind --with-cpu=generic --host=i586-suse-linux Thread model: posix gcc version 4.1.3 20080612 (prerelease) (SUSE Linux) /usr/lib/gcc/i586-suse-linux/4.1.3/cc1 -E -quiet -v gnu_bug_test.c -msse2 -mtune=generic -fpch-preprocess -o gnu_bug_test.i #include "..." search starts here: #include <...> search starts here: /usr/local/include /usr/lib/gcc/i586-suse-linux/4.1.3/include /usr/lib/gcc/i586-suse-linux/4.1.3/../../../../i586-suse-linux/include /usr/include End of search list. /usr/lib/gcc/i586-suse-linux/4.1.3/cc1 -fpreprocessed gnu_bug_test.i -quiet -dumpbase gnu_bug_test.c -msse2 -mtune=generic -auxbase gnu_bug_test -version -o gnu_bug_test.s GNU C version 4.1.3 20080612 (prerelease) (SUSE Linux) (i586-suse-linux) compiled by GNU C version 4.1.3 20080612 (prerelease) (SUSE Linux). GGC heuristics: --param ggc-min-expand=93 --param ggc-min-heapsize=119353 Compiler executable checksum: 706a2c29a4ed82ef6d0aa55a96477d0c /usr/lib/gcc/i586-suse-linux/4.1.3/../../../../i586-suse-linux/bin/as -V -Qy -o gnu_bug_test.o gnu_bug_test.s GNU assembler version 2.19 (i586-suse-linux) using BFD version (GNU Binutils; openSUSE 11.1) 2.19 gnu_bug_test.s: Assembler messages: gnu_bug_test.s:30: Error: suffix or operands invalid for `mul' gnu_bug_test.s:31: Error: suffix or operands invalid for `add' gnu_bug_test.s:32: Error: suffix or operands invalid for `adc'
gnu_bug_test.i # 1 "gnu_bug_test.c" # 1 "<built-in>" # 1 "<command line>" # 1 "gnu_bug_test.c" # 15 "gnu_bug_test.c" int main() { unsigned long a[1]; unsigned long b[1]; unsigned long r[2]; a[0] = b[0] = 0xFFFFFFFF; { __asm __volatile ( "mul %3 \n\t" "add %2, %0 \n\t" "adc %3, %1 \n\t" : "=r"(r[0]),"=r"(r[1]) : "eax"(a[0]),"edx"(b[0]), "0"(r[0]),"1"(r[1]) : "cc"); }; return 0; } -- Summary: wrong register (xmm) used when compiling inline assembly with msse2 option Product: gcc Version: 4.1.3 Status: UNCONFIRMED Severity: normal Priority: P3 Component: inline-asm AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: fabrice at mocana dot com GCC build triplet: i586-suse-linux GCC host triplet: i586-suse-linux GCC target triplet: i586-suse-linux http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39114