Optimal for loop on the 68020.

there IS no ``average'' SubGenius david at sun.com
Tue Jun 6 13:21:49 AEST 1989


The Sun 680x0 compiler has been able to generate dbcc loops for a long
time.  However, the loop has to be written in a particular form.
Here are some examples compiled with the SunOS 3.5 cc:

1.
	register short s;
	for (s = 127; s != -1; s--) ;

	moveq	#127,d7
LY00001:
	dbra	d7,LY00001

2a.
	register int i;
	for (i = 127; i != -1; i--) ;

	moveq	#127,d6
LY00003:
	subql	#1,d6
	moveq	#-1,d7
	cmpl	d7,d6
	jne	LY00003

(Oops!)

2b.
	register int i;
	i = 127;
	while (--i != -1) ;

	moveq	#127,d6
L20:
	dbra	d6,L20
	clrw	d6
	subql	#1,d6
	jcc	L20

3.
	extern int x;
	register short s;
	s = 127;
	while (x >= 0 && --s != -1) ;

	moveq	#127,d7
L15:
	tstl	_x
	dblt	d7,L15


P.S. Sun users might want to look at the PR_LOOP macros in
<pixrect/pr_impl_util.h>.

-- 
David DiGiacomo, Sun Microsystems, Mt. View, CA  sun!david david at sun.com



More information about the Comp.lang.c mailing list