🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by "Douglas C. Schmidt" Tue, 20 Sep 1988 05:06
gcc 1.28 produces faulty asm output for sparc.
#1679
Author: "Douglas C. Schmidt"
Date: Tue, 20 Sep 1988 05:06
137 lines
3832 bytes
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
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads