Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Posting-Version: version B 2.10 beta 3/9/83; site vaxine.UUCP
Path: utzoo!linus!vaxine!ptw
From: ptw@vaxine.UUCP (P. Tucker Withington)
Newsgroups: net.lang.c
Subject: Casting aspersions...
Message-ID: <245@vaxine.UUCP>
Date: Mon, 11-Jul-83 10:32:24 EDT
Article-I.D.: vaxine.245
Posted: Mon Jul 11 10:32:24 1983
Date-Received: Mon, 11-Jul-83 13:28:40 EDT
References: <674@umcp-cs.UUCP>
Organization: Automatix Inc., Billerica, MA
Lines: 39

Speaking of type casts, can anyone explain the following?

	char c;
	int *pi;

	main()
	{

		c = *((char *) pi);
		c = (char) *pi;

On 4.1 generates:

	movb	*_pi,_c
	cvtbl   *_pi,r0                 ; Huh?
	cvtlb	r0,_c

With MIT cc generates:

	movl	pi,a0
	movb	a0@,c
	movl	pi,a0
	movl    a0@,d0                  | Looks better
	movb	d0,c

Is that the reason for:

	/* THIS CODE IS VAX DEPENDENT IN HANDLING %l? AND %c */

	case 'c':
		b = *adx;
		for (i = 24; i >= 0; i -= 8)
			if (c = (b >> i) & 0x7f)
				putchar(c, touser);
		break;

?

				       --Tucker (ptw@vaxine.UUCP)