🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: gnu.gcc.bug
Article #2306

recomputing invariant values

#2306
From: Ken Raeburn
Date: Wed, 15 Feb 1989 16:52
82 lines
2283 bytes
Using gcc 1.33, vax version, configured for GNU assembler, 3 patches
from RMS; optimizing, with -fcombine-regs and -fstrength-reduce
enabled.

Source file (one I reported back for 1.28, I think; still have the
file but not the bug report):

    typedef struct x {
	struct {
	    int numRects;
	} *pCompositeClip;
	struct x *devPriv;
    } *GCPtr;

    extern	int	Nchannels;

    tlsetspan( pGC, x, y, width)
	GCPtr	pGC;
	int		x,y;
	int		width;
    {
	register unsigned short *p;
	register short zblock;	/* generates even worse code for `int' */
	int		i;
	int nclip = pGC->devPriv->pCompositeClip->numRects;
	while (nclip-- > 0) {
	    for (i=0; i<Nchannels; i++) {
		zblock =  0x1234567 ;
		*p++ = x & 0x3fff;
		*p++ = y & 0x3fff;
		*p++ = width &0x3fff;
		*p++ = 		0x07a0  | zblock;
		*p++ = 0x6000 |(0x1fff & -width);
	    }
	}
    }

Assembly output:

    #NO_APP
    gcc_compiled.:
    .text
	    .align 1
    .globl _tlsetspan
    _tlsetspan:
	    .word 0x7c0
	    movl 16(ap),r9
	    movl 4(ap),r10
	    movl *4(r10),r0
	    movl (r0),r5
	    bicw3 $49152,8(ap),r8
	    bicw3 $49152,12(ap),r6
	    jbr L1
    L7:
	    clrl r2
	    cmpl r2,_Nchannels
	    jgeq L1
	    movw r9,r3
	    bicw3 $49152,r3,r4
	    movw $18407,r7
    L6:
	    movw r8,(r1)+
	    movw r6,(r1)+
	    movw r4,(r1)+
	    movw r7,(r1)+
	    mnegw r3,r0			# unchanging
	    bicw2 $57344,r0
	    bisw3 $24576,r0,(r1)+
	    jaoblss _Nchannels,r2,L6
    L1:
	    decl r5
	    cmpl r5,$-1
	    jgtr L7
	    ret

The three lines starting at the comment compute values that are the
same each pass through the loops.  Furthermore, the assignment after
L7 of r3 from r9 can also be moved outside the loop it is in.
(Actually, I don't see the need for two registers there.)

-- Ken
Technical Details
Message-ID: <8902151652.AA10141@MULTICS.MIT.EDU>
Path: arc1-ca.pugleaf.net!utzoo!yunexus!telly!attcan!dptcdc!jarvis.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!ATHENA.MIT.EDU!raeburn

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!yunexus!telly!attcan!dptcdc!jarvis.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!ATHENA.MIT.EDU!raeburn
From: raeburn@ATHENA.MIT.EDU (Ken Raeburn)
Newsgroups: gnu.gcc.bug
Subject: recomputing invariant values
Message-ID: <8902151652.AA10141@MULTICS.MIT.EDU>
Date: 15 Feb 89 16:52:19 GMT
Article-I.D.: MULTICS.8902151652.AA10141
Sender: daemon@tut.cis.ohio-state.edu
Distribution: gnu
Organization: GNUs Not Usenet
Lines: 82