schmidt%siam.ics.uci.edu@ORION.CF.UCI.EDU ("Douglas C. Schmidt") (09/20/88)
Bug Report for GCC: ------------------- Problem : gcc 1.28 -O produces assembly code on the sparc that is disagreeable to the assembler. I wish I could be more specific as to the line of source code responsible for this, but I don't read sparc asm (yet). The assembly code, annotated at the site of the complaint, is enclosed below. 1.) Version : gcc 1.28 ----------- 2.) Input Program : ----------------- s22(pd0) /* 2.2 Identifiers (Names) */ struct defs { int cbits; /* No. of bits per char */ int ibits; /* int */ int sbits; /* short */ int lbits; /* long */ int ubits; /* unsigned */ int fbits; /* float */ int dbits; /* double */ float fprec; /* Smallest number that can be */ float dprec; /* significantly added to 1. */ int flgs; /* Print return codes, by section */ int flgm; /* Announce machine dependencies */ int flgd; /* give explicit diagnostics */ int flgl; /* Report local return codes. */ int rrc; /* recent return code */ int crc; /* Cumulative return code */ char rfs[8]; /* Return from section */ }; struct defs *pd0; { int longname, a234, a; int _, _234, A, rc; static char s22er[] = "s22,er%d\n"; static char qs22[8] = "s22 "; char *ps, *pt; /* Initialize */ rc = 0; ps = qs22; pt = pd0 -> rfs; while (*pt++ = *ps++); /* An identifier is a sequence of letters and digits; the first character must be a letter. The under- score _ counts as a letter. */ a=1; _=2; _234=3; a234=4; if(a+_+_234+a234 != 10) { rc = rc+1; if(pd0->flgd != 0) printf(s22er,1); } /* Upper and lower case letters are different. */ A = 2; if (A == a) { rc = rc+4; if (pd0->flgd != 0) printf(s22er,4); } return(rc); } 3.) Command Used : gcc -O ---------------- 4.) Files used : -------------- tm.h -> tm-sparc.h md -> sparc.md config.h -> config-sun4.h aux-output.c -> output-sparc.c 5.) Machine(s) used : ------------------- Sun 4 running Sun4.0 6.) Compiler diagnostics : ------------------------ as: "s22.s", line 28: error: statement syntax 7.) Assembler output: .data _s22er.0: .ascii "s22,er%d\12\0" _qs22.1: .ascii "s22 \0" .text .align 4 .global _s22 .proc 1 _s22: !#PROLOGUE# 0 save %sp,-112,%sp !#PROLOGUE# 1 mov %i0,%o3 mov 0,%l0 set _qs22.1,%o2 add %o3,60,%o1 L2: ldsb [%o2],%o0 stb %o0,[%o1] add %o2,1,%o2 add %o1,1,%o1 sll %o0,0x18,%o0 sra %o0,0x18,%o0 tst %o0 bne L2 nop cmp 1,2 /* here's the offending line */ bne L6 nop add %l0,4,%l0 ld [%o3+44],%o0 tst %o0 be L6 nop set _s22er.0,%o0 call _printf mov 4,%o1 L6: mov %l0,%i0 ret restore