Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Posting-Version: version B 2.10.2 9/18/84; site rlgvax.UUCP
Path: utzoo!linus!philabs!cmcl2!seismo!rlgvax!guy
From: guy@rlgvax.UUCP (Guy Harris)
Newsgroups: net.unix-wizards,net.wanted,net.micro.68k
Subject: Re: Words wanted on 68000 invalid operand challenge
Message-ID: <183@rlgvax.UUCP>
Date: Thu, 11-Oct-84 00:14:12 EDT
Article-I.D.: rlgvax.183
Posted: Thu Oct 11 00:14:12 1984
Date-Received: Fri, 12-Oct-84 05:40:22 EDT
References: <328@ncoast.UUCP> <192@sol1.UUCP> <4019@elsie.UUCP> <181@rlgvax.UUCP>
Organization: CCI Office Systems Group, Reston, VA
Lines: 31

Here's the fix to the MIT 68000 C compiler to keep it from generating "movb"s
into address registers:

In "table.c", before the table entry that reads something like

	ASSIGN,	INAREG|FOREFF|FORCC,
		EAA,	TSCALAR|TFLOAT,
		EA,	TSCALAR|TFLOAT,
			0,	RLEFT|RRIGHT|RESCC,
			"	moveZB	AR,AL\nT",

put an entry that reads like

	ASSIGN,	INAREG|FOREFF|FORCC,
		EAA,	TCHAR,
		SBREG|STBREG,	TCHAR,
			NAREG|NASR,	RLEFT|RRIGHT|RESCC,
			"	move.l	AR,A1\n	moveZB	A1,AL\nT",

(your mileage and exact entries may differ).  This entry forces a move of
a "char" into a "B register" (which is an address register) to proceed
first by moving the character into a scratch "A register" (data register)
and then move the data register into the address register.

This fix is thanks to somebody at MIT named, I believe, Jonathan something-
or-other, and was posted in response to an article from Steve Kramer mentioning
the bug.  (Apologies to Jonathan X, but I don't have the article any more
and don't remember his name.)

	Guy Harris
	{seismo,ihnp4,allegra}!rlgvax!guy