When building a generic cross-compiler from sparc to sparc64 (using GNU make and native gcc 3.2.2 for the build), the resulting "xgcc" will output assembly operands in incorrect order, making GNU as stop on error. GCC will output branch-with-prediction instructions like "ba,pt,a %xcc LABEL" which is invalid. The correct order is "ba,a,pt %xcc LABEL". This did not happen with GCC 3.2.1 so it is some kind of regression. The error does not occur while building a native gcc-3.2.2 on sparc64 NetBSD-1.5ZC configured with --enable-languages=c,c++ and similarly configured binutils 2.13.2.1 Binutils and GCC were both configured with: "--target=sparc64-elf --program-prefix=sparc64- --enable-languages=c,c++" and newlib-1.11.0 was linked into the gcc tree for automatic building, with NetBSD startup files (crt*.o) in /usr/local/sparc64/lib to make configure scripts that try to test whether xgcc works by attempting to link something happy. The errors occurred while trying to build newlib/libc/stdlib/ A transcript of the failing session follows: -----8<-----------8<-----------8<-----------8<-----------8<------ Reading specs from /usr/tmp/gcc-3.2.2/work/gcc/specs Configured with: ../configure --prefix=/usr/local/sparc64 --enable-languages=c,c++ --target=sparc64-elf --program-prefix=sparc64- Thread model: single gcc version 3.2.2 /usr/tmp/gcc-3.2.2/work/gcc/cpp0 -lang-c -nostdinc -v -I. -I../../../../../newlib/libc/stdlib -iprefix /usr/tmp/gcc-3.2.2/work/gcc/../lib/gcc-lib/sparc64-elf/3.2.2/ -isystem /usr/tmp/gcc-3.2.2/work/gcc/include -isystem /usr/tmp/gcc-3.2.2/work/sparc64-elf/newlib/include -isystem /usr/local/sparc64/sparc64-elf/bin/include -isystem /usr/local/sparc64/sparc64-elf/lib/include -D__GNUC__=3 -D__GNUC_MINOR__=2 -D__GNUC_PATCHLEVEL__=2 -D__GXX_ABI_VERSION=102 -Dsparc -D__ELF__ -D__sparc__ -D__ELF__ -D__sparc -Acpu=sparc -Amachine=sparc -D__OPTIMIZE__ -D__STDC_HOSTED__=1 -D__supersparc__ -D__sparc_v8__ -D__arch64__ -Acpu=sparc64 -Amachine=sparc64 -D__svr4__ -DPACKAGE="newlib" -DVERSION="1.11.0" -DMALLOC_ALIGNMENT=8 -DREENTRANT_SYSCALLS_PROVIDED -DHAVE_BLKSIZE -DHAVE_GETTIMEOFDAY -DHAVE_FCNTL -DTARGET_PTR_SIZE=64 -DINTERNAL_NEWLIB -DDEFINE_MALLOPT -isystem /usr/tmp/gcc-3.2.2/work/sparc64-elf/newlib/targ-include -isystem /usr/tmp/gcc-3.2.2/newlib/libc/include -isystem /usr/local/sparc64/sparc64-elf/include ../../../../../newlib/libc/stdlib/mallocr.c mallocr.i ignoring nonexistent directory "/usr/tmp/gcc-3.2.2/work/sparc64-elf/newlib/include" ignoring nonexistent directory "/usr/local/sparc64/sparc64-elf/bin/include" ignoring nonexistent directory "/usr/local/sparc64/sparc64-elf/lib/include" ignoring nonexistent directory "/usr/local/sparc64/sparc64-elf/include" GNU CPP version 3.2.2 (cpplib) (sparc64-elf) #include "..." search starts here: #include <...> search starts here: . ../../../../../newlib/libc/stdlib /usr/tmp/gcc-3.2.2/work/gcc/include /usr/tmp/gcc-3.2.2/work/sparc64-elf/newlib/targ-include /usr/tmp/gcc-3.2.2/newlib/libc/include End of search list. /usr/tmp/gcc-3.2.2/work/gcc/cc1 -fpreprocessed mallocr.i -quiet -dumpbase mallocr.c -mcpu=supersparc -mtune=supersparc -O2 -O2 -O2 -version -fno-builtin -o mallocr.s GNU CPP version 3.2.2 (cpplib) (sparc64-elf) GNU C version 3.2.2 (sparc64-elf) compiled by GNU C version 3.2.2. /usr/local/sparc64/sparc64-elf/bin/as -V -s -64 -no-undeclared-regs -o malloptr.o mallocr.s GNU assembler version 2.13.2.1 (sparc64-elf) using BFD version 2.13.2.1 mallocr.s: Assembler messages: mallocr.s:24: Error: Illegal operands mallocr.s:43: Error: Illegal operands -----8<-----------8<-----------8<-----------8<-----------8<------ Release: gcc-3.2.2 Environment: sparc-unknown-netbsdelf16 gcc 3.2.2 binutils 2.13.2.1 How-To-Repeat: Configure and try to build a sparc->sparc64 cross compiler, and compile any C source leading to the emission of branch with prediction instructions with the "annul" bit set, such as newlib-1.11.0/newlib/libc/stdlib/mallocr.c (preprocessed source included)
Fix: Correct order of emission of attributes to branch instructions with predictions; The ",a" modifier ("annul" bit) should always appear first (sections A.3 - A.7 of the SPARCv9 architecture manual).
Responsible-Changed-From-To: unassigned->ebotcazou Responsible-Changed-Why: Fixing.
State-Changed-From-To: open->analyzed State-Changed-Why: Confirmed with gcc 3.2.1 and gcc 3.2.2
From: ebotcazou@gcc.gnu.org To: gcc-gnats@gcc.gnu.org Cc: Subject: target/10067 Date: 28 Mar 2003 09:10:43 -0000 CVSROOT: /cvs/gcc Module name: gcc Changes by: ebotcazou@gcc.gnu.org 2003-03-28 09:10:43 Modified files: gcc : ChangeLog gcc/config/sparc: sparc.md gcc/testsuite : ChangeLog Added files: gcc/testsuite/gcc.dg: ultrasp8.c Log message: PR target/10067 * config/sparc/sparc.md (jump pattern): Correct order when issuing the annuling marker. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&r1=1.17237&r2=1.17238 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/sparc/sparc.md.diff?cvsroot=gcc&r1=1.183&r2=1.184 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.2552&r2=1.2553 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gcc.dg/ultrasp8.c.diff?cvsroot=gcc&r1=NONE&r2=1.1
From: ebotcazou@gcc.gnu.org To: gcc-gnats@gcc.gnu.org Cc: Subject: target/10067 Date: 28 Mar 2003 09:18:01 -0000 CVSROOT: /cvs/gcc Module name: gcc Branch: gcc-3_3-branch Changes by: ebotcazou@gcc.gnu.org 2003-03-28 09:18:00 Modified files: gcc : ChangeLog gcc/config/sparc: sparc.md gcc/testsuite : ChangeLog Added files: gcc/testsuite/gcc.dg: ultrasp8.c Log message: PR target/10067 * config/sparc/sparc.md (jump pattern): Correct order when issuing the annuling marker. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.16114.2.373&r2=1.16114.2.374 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/sparc/sparc.md.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.181.4.2&r2=1.181.4.3 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.2261.2.128&r2=1.2261.2.129 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gcc.dg/ultrasp8.c.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=NONE&r2=1.1.2.1
From: ebotcazou@gcc.gnu.org To: gcc-gnats@gcc.gnu.org Cc: Subject: target/10067 Date: 28 Mar 2003 09:24:10 -0000 CVSROOT: /cvs/gcc Module name: gcc Branch: gcc-3_2-branch Changes by: ebotcazou@gcc.gnu.org 2003-03-28 09:24:10 Modified files: gcc : ChangeLog gcc/config/sparc: sparc.md gcc/testsuite : ChangeLog Added files: gcc/testsuite/gcc.dg: ultrasp8.c Log message: PR target/10067 * config/sparc/sparc.md (jump pattern): Correct order when issuing the annuling marker. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_2-branch&r1=1.13152.2.657.2.286&r2=1.13152.2.657.2.287 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/sparc/sparc.md.diff?cvsroot=gcc&only_with_tag=gcc-3_2-branch&r1=1.148.2.15.4.3&r2=1.148.2.15.4.4 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_2-branch&r1=1.1672.2.166.2.120&r2=1.1672.2.166.2.121 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gcc.dg/ultrasp8.c.diff?cvsroot=gcc&only_with_tag=gcc-3_2-branch&r1=NONE&r2=1.1.4.1
State-Changed-From-To: analyzed->closed State-Changed-Why: Fixed. See http://gcc.gnu.org/ml/gcc-patches/2003-03/msg02306.html