delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp-workers/1999/08/09/13:22:40

From: pavenis AT lanet DOT lv
Message-ID: <B0000097614@stargate.astr.lu.lv>
To: Eli Zaretskii <eliz AT is DOT elta DOT co DOT il>, djgpp-workers AT delorie DOT com
Date: Mon, 9 Aug 1999 13:30:51 +0300
MIME-Version: 1.0
Subject: Re: Performance regression of 2.95 vs. 2.7, x86, loop-related (fwd)
In-reply-to: <Pine.SUN.3.91.990809112043.19120J-100000@is>
X-mailer: Pegasus Mail for Win32 (v3.11)
Reply-To: djgpp-workers AT delorie DOT com
X-Mailing-List: djgpp-workers AT delorie DOT com
X-Unsubscribes-To: listserv AT delorie DOT com

--Message-Boundary-3817
Content-type: text/plain; charset=US-ASCII
Content-transfer-encoding: 7BIT
Content-description: Mail message body

I tested DJGPP ports of gcc-2.7.2.1, gcc-2.8.1, egcs-1.1.2 and gcc-
2.95. The latest is ths only one which generates '.p2align 4,,7' (see 
attachments). Unfortunatelly I cannot test it easy more as no full
example included (so no real benchmarking)

Andris

On 9 Aug 99, at 11:21, Eli Zaretskii wrote:

> 
> Somebody posted the message below to the bug-gcc list.  It seems like
> this platforms had ".p2align 4,,7" even in v2.7.2.3.  Andris, is this
> something that is configured in a platform-dependent manner in GCC?
> 
> ---------- Forwarded message ----------
> Date: Sun, 08 Aug 1999 17:55:40 -0700
> From: Zack Weinberg <zack AT bitmover DOT com>
> To: gcc-bugs AT gcc DOT gnu DOT org, amylaar AT cygnus DOT co DOT uk
> Cc: lm AT bitmover DOT com
> Subject: Performance regression of 2.95 vs. 2.7, x86, loop-related
> 
> 
> Consider this fragment:
> 
> #include <stdio.h>
> 
> typedef struct
> {
>    unsigned short cksum;
>    unsigned short encoding;
> } sccs;
> 
> #define E_GZIP 0x4
> 
> extern int zputs(void *, FILE *, unsigned char *, int, void (*)());
> extern void gzip_sum();
> 
> unsigned short
> fpd(sccs *s, unsigned char *buf, FILE *out)
> {
> 	unsigned short	sum = 0;
> 	unsigned char	*p, *q, c;
> 	static	unsigned char block[8192];
> 	static	unsigned char *next = block;
> 
> 	/* Checksum up to and including the first newline
> 	 * or the end of the string.
> 	 */
> 	p = buf;
> 	q = next;
> 	for (;;) {
> 		for (;;) {
> 			c = *p++;
> 			if (c == '\0') goto done;
> 			sum += c;
> 			*q++ = c;
> 			if (q == &block[8192]) break;
> 			if (c == '\n') goto done;
> 		}
> 		if (s->encoding & E_GZIP) {
> 			zputs((void *)s, out, block, 8192, gzip_sum);
> 		} else {
> 			fwrite(block, 8192, 1, out);
> 		}
> 		q = block;
> 		if (c == '\n') break;
> 	}
> done:	next = q;
> 	if (!(s->encoding & E_GZIP)) s->cksum += sum;
> 	return (sum);
> }
> 
> The structure of the loops is calculated to get near-optimal code
> generation out of gcc 2.7.x.  gcc 2.95, however, does a transformation
> on it that nearly doubles the execution time of the function, which
> leads to a 30% slowdown of the program this is taken from.  I'm not
> sure if it's loop or jump optimization.  It is NOT global CSE, which
> was my first hypothesis.
> 
> Here is a side-by-side diff of assembly output for the function
> (munged slightly to eliminate spurious differences).  2.7.2.3 is on
> the left, 2.95 on the right.  -O2 -fomit-frame-pointer was used both
> times.  The interesting bits are marked with stars at the left margin.
> 
>  fpd:					fpd:
>  				      >		subl $12,%esp
>  	pushl %ebp				pushl %ebp
>  	pushl %edi				pushl %edi
>  	pushl %esi				pushl %esi
>  	pushl %ebx				pushl %ebx
>  	movl 20(%esp),%ebp	      |		movl 32(%esp),%ebp
>  	xorl %edi,%edi				xorl %edi,%edi
>  	movl 24(%esp),%esi	      |		movl 36(%esp),%esi
>  	movl next.23,%edx			movl next.23,%edx
>  	.p2align 4,,7				.p2align 4,,7
>  .L20:					.L20:
>  	movb (%esi),%bl				movb (%esi),%bl
>  	incl %esi				incl %esi
>  	testb %bl,%bl				testb %bl,%bl
>  	je .L24					je .L24
>  	movzbw %bl,%ax				movzbw %bl,%ax
> !	addw %ax,%di		      |		addl %eax,%edi
>  	movb %bl,(%edx)				movb %bl,(%edx)
>  	incl %edx				incl %edx
>  	cmpl $block.22+8192,%edx		cmpl $block.22+8192,%edx
> *	je .L21			      |		jne .L35
> *	cmpb $10,%bl		      <
> *	je .L24			      <
> *	jmp .L20		      <
> *	.p2align 4,,7		      <
> *.L21:				      <
>  	testb $4,2(%ebp)			testb $4,2(%ebp)
>  	je .L27					je .L27
>  				      >		addl $-12,%esp
>  	pushl $gzip_sum				pushl $gzip_sum
>  	pushl $8192				pushl $8192
>  	pushl $block.22				pushl $block.22
>  	movl 40(%esp),%ecx	      |		movl 64(%esp),%eax
>  	pushl %ecx		      |		pushl %eax
>  	pushl %ebp				pushl %ebp
>  	call zputs				call zputs
>  	addl $20,%esp		      |		addl $32,%esp
>  	jmp .L28				jmp .L28
>  	.p2align 4,,7				.p2align 4,,7
>  .L27:					.L27:
>  	movl 28(%esp),%ecx	      |		movl 40(%esp),%eax
>  	pushl %ecx		      |		pushl %eax
>  	pushl $1				pushl $1
>  	pushl $8192				pushl $8192
>  	pushl $block.22				pushl $block.22
>  	call fwrite				call fwrite
>  	addl $16,%esp				addl $16,%esp
>  .L28:					.L28:
>  	movl $block.22,%edx			movl $block.22,%edx
> *				      >	.L35:
>  	cmpb $10,%bl				cmpb $10,%bl
>  	jne .L20				jne .L20
>  .L24:					.L24:
>  	movl %edx,next.23			movl %edx,next.23
>  	testb $4,2(%ebp)			testb $4,2(%ebp)
>  	jne .L30				jne .L30
>  	addw %di,(%ebp)				addw %di,(%ebp)
>  .L30:					.L30:
>  	movzwl %di,%eax				movzwl %di,%eax
>  	popl %ebx				popl %ebx
>  	popl %esi				popl %esi
>  	popl %edi				popl %edi
>  	popl %ebp				popl %ebp
>  				      >		addl $12,%esp
>  	ret					ret
> 
> The change looks trivial but it isn't.  The two places where c is
> compared with '\n' have been merged into one, and that one is placed
> AFTER the big block of code that is executed only rarely.  The inner
> loop therefore contains a jump to another cache line.  It will almost
> always be taken, but (if I understand x86 branch prediction correctly)
> it will be mispredicted on the first few iterations - and the input
> data to this function is such that the inner loop may only execute a
> few times per call.
> 
> It would be fine to merge the two comparisons if the sole instance
> were contiguous with the inner loop and the outer loop code jumped
> back up.
> 
> It would be nice if I could get the code that gcc 2.7.x generated
> without having to structure the source that way; it's far more natural
> to write this with the "outer loop" in an if block inside the inner
> loop.
> 
> I'd also like to point out the line marked with an exclamation point.
> Unless movzbw clears the high 16 bits of the destination register
> (does it?), we are adding garbage to edi.
> 
> zw
> 
> 



--Message-Boundary-3817
Content-type: text/plain; charset=US-ASCII
Content-disposition: inline
Content-description: Attachment information.

The following section of this message contains a file attachment
prepared for transmission using the Internet MIME message format.
If you are using Pegasus Mail, or any another MIME-compliant system,
you should be able to save it or view it from within your mailer.
If you cannot, please ask your system administrator for assistance.

   ---- File information -----------
     File:  z1-gcc2721.S
     Date:  9 Aug 1999, 13:13
     Size:  1556 bytes.
     Type:  Text

--Message-Boundary-3817
Content-type: Application/Octet-stream; name="z1-gcc2721.S"; type=Text
Content-disposition: attachment; filename="z1-gcc2721.S"
Content-transfer-encoding: BASE64

CS5maWxlCSJ6MS5jIg0KZ2NjMl9jb21waWxlZC46DQpfX19nbnVfY29tcGlsZWRfYzoNCi5s
Y29tbSBfYmxvY2suMiw4MTkyDQouZGF0YQ0KCS5hbGlnbiAyDQpfbmV4dC4zOg0KCS5sb25n
IF9ibG9jay4yDQoudGV4dA0KCS5hbGlnbiAyDQouZ2xvYmwgX2ZwZA0KX2ZwZDoNCglwdXNo
bCAlZWJwDQoJbW92bCAlZXNwLCVlYnANCglzdWJsICQxNiwlZXNwDQoJbW92dyAkMCwtMigl
ZWJwKQ0KCW1vdmwgMTIoJWVicCksJWVheA0KCW1vdmwgJWVheCwtOCglZWJwKQ0KCW1vdmwg
X25leHQuMywlZWF4DQoJbW92bCAlZWF4LC0xMiglZWJwKQ0KTDI6DQpMNToNCgltb3ZsIC04
KCVlYnApLCVlYXgNCgltb3ZiICglZWF4KSwlZGwNCgltb3ZiICVkbCwtMTMoJWVicCkNCglp
bmNsIC04KCVlYnApDQoJY21wYiAkMCwtMTMoJWVicCkNCglqbmUgTDgNCglqbXAgTDkNCgku
YWxpZ24gMiwweDkwDQpMODoNCgltb3Z6YncgLTEzKCVlYnApLCVheA0KCWFkZHcgJWF4LC0y
KCVlYnApDQoJbW92bCAtMTIoJWVicCksJWVheA0KCW1vdmIgLTEzKCVlYnApLCVkbA0KCW1v
dmIgJWRsLCglZWF4KQ0KCWluY2wgLTEyKCVlYnApDQoJY21wbCAkX2Jsb2NrLjIrODE5Miwt
MTIoJWVicCkNCglqbmUgTDEwDQoJam1wIEw2DQoJLmFsaWduIDIsMHg5MA0KTDEwOg0KCWNt
cGIgJDEwLC0xMyglZWJwKQ0KCWpuZSBMMTENCglqbXAgTDkNCgkuYWxpZ24gMiwweDkwDQpM
MTE6DQpMNzoNCglqbXAgTDUNCgkuYWxpZ24gMiwweDkwDQpMNjoNCgltb3ZsIDgoJWVicCks
JWVheA0KCW1vdncgMiglZWF4KSwlZHgNCglhbmR3ICQ0LCVkeA0KCXRlc3R3ICVkeCwlZHgN
CglqZSBMMTINCglwdXNobCAkX2d6aXBfc3VtDQoJcHVzaGwgJDgxOTINCglwdXNobCAkX2Js
b2NrLjINCgltb3ZsIDE2KCVlYnApLCVlYXgNCglwdXNobCAlZWF4DQoJbW92bCA4KCVlYnAp
LCVlYXgNCglwdXNobCAlZWF4DQoJY2FsbCBfenB1dHMNCglhZGRsICQyMCwlZXNwDQoJam1w
IEwxMw0KCS5hbGlnbiAyLDB4OTANCkwxMjoNCgltb3ZsIDE2KCVlYnApLCVlYXgNCglwdXNo
bCAlZWF4DQoJcHVzaGwgJDENCglwdXNobCAkODE5Mg0KCXB1c2hsICRfYmxvY2suMg0KCWNh
bGwgX2Z3cml0ZQ0KCWFkZGwgJDE2LCVlc3ANCkwxMzoNCgltb3ZsICRfYmxvY2suMiwtMTIo
JWVicCkNCgljbXBiICQxMCwtMTMoJWVicCkNCglqbmUgTDE0DQoJam1wIEwzDQoJLmFsaWdu
IDIsMHg5MA0KTDE0Og0KTDQ6DQoJam1wIEwyDQoJLmFsaWduIDIsMHg5MA0KTDM6DQoJbm9w
DQpMOToNCgltb3ZsIC0xMiglZWJwKSwlZWF4DQoJbW92bCAlZWF4LF9uZXh0LjMNCgltb3Zs
IDgoJWVicCksJWVheA0KCW1vdncgMiglZWF4KSwlZHgNCglhbmR3ICQ0LCVkeA0KCXRlc3R3
ICVkeCwlZHgNCglqbmUgTDE1DQoJbW92bCA4KCVlYnApLCVlYXgNCgltb3ZsIDgoJWVicCks
JWVkeA0KCW1vdncgKCVlZHgpLCVjeA0KCWFkZHcgLTIoJWVicCksJWN4DQoJbW92dyAlY3gs
KCVlYXgpDQpMMTU6DQoJbW92endsIC0yKCVlYnApLCVlZHgNCgltb3ZsICVlZHgsJWVheA0K
CWptcCBMMQ0KCS5hbGlnbiAyLDB4OTANCkwxOg0KCWxlYXZlDQoJcmV0DQo=
--Message-Boundary-3817
Content-type: text/plain; charset=US-ASCII
Content-disposition: inline
Content-description: Attachment information.

The following section of this message contains a file attachment
prepared for transmission using the Internet MIME message format.
If you are using Pegasus Mail, or any another MIME-compliant system,
you should be able to save it or view it from within your mailer.
If you cannot, please ask your system administrator for assistance.

   ---- File information -----------
     File:  z1-gcc295.S
     Date:  9 Aug 1999, 13:03
     Size:  1133 bytes.
     Type:  Text

--Message-Boundary-3817
Content-type: Application/Octet-stream; name="z1-gcc295.S"; type=Text
Content-disposition: attachment; filename="z1-gcc295.S"
Content-transfer-encoding: BASE64

CS5maWxlCSJ6MS5jIg0KZ2NjMl9jb21waWxlZC46DQpfX19nbnVfY29tcGlsZWRfYzoNCi5s
Y29tbSBfYmxvY2suMyw4MTkyDQouZGF0YQ0KCS5wMmFsaWduIDINCl9uZXh0LjQ6DQoJLmxv
bmcgX2Jsb2NrLjMNCi50ZXh0DQoJLnAyYWxpZ24gMg0KLmdsb2JsIF9mcGQNCl9mcGQ6DQoJ
cHVzaGwgJWVicA0KCW1vdmwgJWVzcCwlZWJwDQoJc3VibCAkMTIsJWVzcA0KCXB1c2hsICVl
ZGkNCglwdXNobCAlZXNpDQoJcHVzaGwgJWVieA0KCW1vdmwgMTIoJWVicCksJWVzaQ0KCW1v
dmwgX25leHQuNCwlZWR4DQoJeG9ybCAlZWRpLCVlZGkNCgkucDJhbGlnbiA0LCw3DQpMMTk6
DQoJbW92YiAoJWVzaSksJWJsDQoJaW5jbCAlZXNpDQoJdGVzdGIgJWJsLCVibA0KCWplIEwx
MA0KCXhvcmwgJWVheCwlZWF4DQoJbW92YiAlYmwsJWFsDQoJYWRkbCAlZWF4LCVlZGkNCglt
b3ZiICVibCwoJWVkeCkNCglpbmNsICVlZHgNCgljbXBsICRfYmxvY2suMys4MTkyLCVlZHgN
CglqbmUgTDIwDQoJbW92bCA4KCVlYnApLCVlYXgNCgl0ZXN0YiAkNCwyKCVlYXgpDQoJamUg
TDE0DQoJYWRkbCAkLTEyLCVlc3ANCglwdXNobCAkX2d6aXBfc3VtDQoJcHVzaGwgJDgxOTIN
CglwdXNobCAkX2Jsb2NrLjMNCgltb3ZsIDE2KCVlYnApLCVlYXgNCglwdXNobCAlZWF4DQoJ
bW92bCA4KCVlYnApLCVlYXgNCglwdXNobCAlZWF4DQoJY2FsbCBfenB1dHMNCglhZGRsICQz
MiwlZXNwDQoJam1wIEwxNQ0KCS5wMmFsaWduIDQsLDcNCkwxNDoNCgltb3ZsIDE2KCVlYnAp
LCVlYXgNCglwdXNobCAlZWF4DQoJcHVzaGwgJDENCglwdXNobCAkODE5Mg0KCXB1c2hsICRf
YmxvY2suMw0KCWNhbGwgX2Z3cml0ZQ0KCWFkZGwgJDE2LCVlc3ANCkwxNToNCgltb3ZsICRf
YmxvY2suMywlZWR4DQpMMjA6DQoJY21wYiAkMTAsJWJsDQoJam5lIEwxOQ0KTDEwOg0KCW1v
dmwgJWVkeCxfbmV4dC40DQoJbW92bCA4KCVlYnApLCVlYXgNCgl0ZXN0YiAkNCwyKCVlYXgp
DQoJam5lIEwxNw0KCWFkZHcgJWRpLCglZWF4KQ0KTDE3Og0KCXhvcmwgJWVheCwlZWF4DQoJ
bGVhbCAtMjQoJWVicCksJWVzcA0KCW1vdncgJWRpLCVheA0KCXBvcGwgJWVieA0KCXBvcGwg
JWVzaQ0KCXBvcGwgJWVkaQ0KCW1vdmwgJWVicCwlZXNwDQoJcG9wbCAlZWJwDQoJcmV0DQo=
--Message-Boundary-3817
Content-type: text/plain; charset=US-ASCII
Content-disposition: inline
Content-description: Attachment information.

The following section of this message contains a file attachment
prepared for transmission using the Internet MIME message format.
If you are using Pegasus Mail, or any another MIME-compliant system,
you should be able to save it or view it from within your mailer.
If you cannot, please ask your system administrator for assistance.

   ---- File information -----------
     File:  z1-egcs.S
     Date:  9 Aug 1999, 13:02
     Size:  1092 bytes.
     Type:  Text

--Message-Boundary-3817
Content-type: Application/Octet-stream; name="z1-egcs.S"; type=Text
Content-disposition: attachment; filename="z1-egcs.S"
Content-transfer-encoding: BASE64

CS5maWxlCSJ6MS5jIg0KZ2NjMl9jb21waWxlZC46DQpfX19nbnVfY29tcGlsZWRfYzoNCi5s
Y29tbSBfYmxvY2suMiw4MTkyDQouZGF0YQ0KCS5wMmFsaWduIDINCl9uZXh0LjM6DQoJLmxv
bmcgX2Jsb2NrLjINCi50ZXh0DQoJLnAyYWxpZ24gMg0KLmdsb2JsIF9mcGQNCl9mcGQ6DQoJ
cHVzaGwgJWVicA0KCW1vdmwgJWVzcCwlZWJwDQoJcHVzaGwgJWVkaQ0KCXhvcmwgJWVkaSwl
ZWRpDQoJcHVzaGwgJWVzaQ0KCXB1c2hsICVlYngNCgltb3ZsIDEyKCVlYnApLCVlc2kNCglt
b3ZsIF9uZXh0LjMsJWVkeA0KCS5wMmFsaWduIDINCkwxOToNCgltb3ZiICglZXNpKSwlYmwN
CglpbmNsICVlc2kNCgl0ZXN0YiAlYmwsJWJsDQoJamUgTDkNCgl4b3JsICVlYXgsJWVheA0K
CW1vdmIgJWJsLCVhbA0KCW1vdmIgJWJsLCglZWR4KQ0KCWFkZGwgJWVheCwlZWRpDQoJaW5j
bCAlZWR4DQoJY21wbCAkX2Jsb2NrLjIrODE5MiwlZWR4DQoJam5lIEwyMA0KCW1vdmwgOCgl
ZWJwKSwlZWN4DQoJdGVzdGIgJDQsMiglZWN4KQ0KCWplIEwxMw0KCXB1c2hsICRfZ3ppcF9z
dW0NCglwdXNobCAkODE5Mg0KCXB1c2hsICRfYmxvY2suMg0KCW1vdmwgMTYoJWVicCksJWVj
eA0KCXB1c2hsICVlY3gNCgltb3ZsIDgoJWVicCksJWVjeA0KCXB1c2hsICVlY3gNCgljYWxs
IF96cHV0cw0KCWFkZGwgJDIwLCVlc3ANCglqbXAgTDE0DQoJLnAyYWxpZ24gMg0KTDEzOg0K
CW1vdmwgMTYoJWVicCksJWVjeA0KCXB1c2hsICVlY3gNCglwdXNobCAkMQ0KCXB1c2hsICQ4
MTkyDQoJcHVzaGwgJF9ibG9jay4yDQoJY2FsbCBfZndyaXRlDQoJYWRkbCAkMTYsJWVzcA0K
TDE0Og0KCW1vdmwgJF9ibG9jay4yLCVlZHgNCkwyMDoNCgljbXBiICQxMCwlYmwNCglqbmUg
TDE5DQpMOToNCgltb3ZsICVlZHgsX25leHQuMw0KCW1vdmwgOCglZWJwKSwlZWN4DQoJdGVz
dGIgJDQsMiglZWN4KQ0KCWpuZSBMMTcNCglhZGR3ICVkaSwoJWVjeCkNCkwxNzoNCglsZWFs
IC0xMiglZWJwKSwlZXNwDQoJeG9ybCAlZWF4LCVlYXgNCgltb3Z3ICVkaSwlYXgNCglwb3Bs
ICVlYngNCglwb3BsICVlc2kNCglwb3BsICVlZGkNCgltb3ZsICVlYnAsJWVzcA0KCXBvcGwg
JWVicA0KCXJldA0K
--Message-Boundary-3817
Content-type: text/plain; charset=US-ASCII
Content-disposition: inline
Content-description: Attachment information.

The following section of this message contains a file attachment
prepared for transmission using the Internet MIME message format.
If you are using Pegasus Mail, or any another MIME-compliant system,
you should be able to save it or view it from within your mailer.
If you cannot, please ask your system administrator for assistance.

   ---- File information -----------
     File:  z1-gcc281.S
     Date:  9 Aug 1999, 13:28
     Size:  1629 bytes.
     Type:  Text

--Message-Boundary-3817
Content-type: Application/Octet-stream; name="z1-gcc281.S"; type=Text
Content-disposition: attachment; filename="z1-gcc281.S"
Content-transfer-encoding: BASE64

CS5maWxlCSJ6MS5jIg0KZ2NjMl9jb21waWxlZC46DQpfX19nbnVfY29tcGlsZWRfYzoNCi5s
Y29tbSBfYmxvY2suMiw4MTkyDQouZGF0YQ0KCS5wMmFsaWduIDINCl9uZXh0LjM6DQoJLmxv
bmcgX2Jsb2NrLjINCi50ZXh0DQoJLnAyYWxpZ24gMg0KLmdsb2JsIF9mcGQNCl9mcGQ6DQoJ
cHVzaGwgJWVicA0KCW1vdmwgJWVzcCwlZWJwDQoJc3VibCAkMTYsJWVzcA0KCXB1c2hsICVl
YngNCgltb3Z3ICQwLC0yKCVlYnApDQoJbW92bCAxMiglZWJwKSwlZWF4DQoJbW92bCAlZWF4
LC04KCVlYnApDQoJbW92bCBfbmV4dC4zLCVlYXgNCgltb3ZsICVlYXgsLTEyKCVlYnApDQpM
MjoNCkw1Og0KCW1vdmwgLTgoJWVicCksJWVheA0KCW1vdmIgKCVlYXgpLCVkbA0KCW1vdmIg
JWRsLC0xMyglZWJwKQ0KCWluY2wgLTgoJWVicCkNCgljbXBiICQwLC0xMyglZWJwKQ0KCWpu
ZSBMOA0KCWptcCBMOQ0KCS5hbGlnbiAyLDB4OTANCkw4Og0KCW1vdnpidyAtMTMoJWVicCks
JWF4DQoJYWRkdyAlYXgsLTIoJWVicCkNCgltb3ZsIC0xMiglZWJwKSwlZWF4DQoJbW92YiAt
MTMoJWVicCksJWRsDQoJbW92YiAlZGwsKCVlYXgpDQoJaW5jbCAtMTIoJWVicCkNCgljbXBs
ICRfYmxvY2suMis4MTkyLC0xMiglZWJwKQ0KCWpuZSBMMTANCglqbXAgTDYNCgkuYWxpZ24g
MiwweDkwDQpMMTA6DQoJY21wYiAkMTAsLTEzKCVlYnApDQoJam5lIEw3DQoJam1wIEw5DQoJ
LmFsaWduIDIsMHg5MA0KTDExOg0KTDc6DQoJam1wIEw1DQoJLmFsaWduIDIsMHg5MA0KTDY6
DQoJbW92bCA4KCVlYnApLCVlYXgNCgltb3Z3IDIoJWVheCksJWR4DQoJYW5kbCAkNCwlZWR4
DQoJdGVzdHcgJWR4LCVkeA0KCWplIEwxMg0KCXB1c2hsICRfZ3ppcF9zdW0NCglwdXNobCAk
ODE5Mg0KCXB1c2hsICRfYmxvY2suMg0KCW1vdmwgMTYoJWVicCksJWVheA0KCXB1c2hsICVl
YXgNCgltb3ZsIDgoJWVicCksJWVheA0KCXB1c2hsICVlYXgNCgljYWxsIF96cHV0cw0KCWFk
ZGwgJDIwLCVlc3ANCglqbXAgTDEzDQoJLmFsaWduIDIsMHg5MA0KTDEyOg0KCW1vdmwgMTYo
JWVicCksJWVheA0KCXB1c2hsICVlYXgNCglwdXNobCAkMQ0KCXB1c2hsICQ4MTkyDQoJcHVz
aGwgJF9ibG9jay4yDQoJY2FsbCBfZndyaXRlDQoJYWRkbCAkMTYsJWVzcA0KTDEzOg0KCW1v
dmwgJF9ibG9jay4yLC0xMiglZWJwKQ0KCWNtcGIgJDEwLC0xMyglZWJwKQ0KCWpuZSBMNA0K
CWptcCBMMw0KCS5hbGlnbiAyLDB4OTANCkwxNDoNCkw0Og0KCWptcCBMMg0KCS5hbGlnbiAy
LDB4OTANCkwzOg0KCW5vcA0KTDk6DQoJbW92bCAtMTIoJWVicCksJWVheA0KCW1vdmwgJWVh
eCxfbmV4dC4zDQoJbW92bCA4KCVlYnApLCVlYXgNCgltb3Z3IDIoJWVheCksJWR4DQoJYW5k
bCAkNCwlZWR4DQoJdGVzdHcgJWR4LCVkeA0KCWpuZSBMMTUNCgltb3ZsIDgoJWVicCksJWVh
eA0KCW1vdmwgOCglZWJwKSwlZWR4DQoJbW92dyAoJWVkeCksJWN4DQoJbW92dyAtMiglZWJw
KSwlZHgNCgltb3ZsICVlY3gsJWVieA0KCWFkZGwgJWVkeCwlZWJ4DQoJbW92dyAlYngsKCVl
YXgpDQpMMTU6DQoJbW92endsIC0yKCVlYnApLCVlZHgNCgltb3ZsICVlZHgsJWVheA0KCWpt
cCBMMQ0KCS5hbGlnbiAyLDB4OTANCkwxOg0KCW1vdmwgLTIwKCVlYnApLCVlYngNCglsZWF2
ZQ0KCXJldA0K

--Message-Boundary-3817--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019