Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Posting-Version: version B 2.10.2 9/18/84; site watcgl.UUCP Path: utzoo!watmath!watcgl!dmmartindale From: dmmartindale@watcgl.UUCP (Dave Martindale) Newsgroups: net.arch Subject: Re: Strange architecture proposal Message-ID: <1256@watcgl.UUCP> Date: Wed, 13-Feb-85 00:32:15 EST Article-I.D.: watcgl.1256 Posted: Wed Feb 13 00:32:15 1985 Date-Received: Wed, 13-Feb-85 04:45:32 EST References: <968@calgary.UUCP> Reply-To: dmmartindale@watcgl.UUCP (Dave Martindale) Organization: U of Waterloo, Ontario Lines: 27 I think the idea of having addresses encode the data type is ultimately unworkable, for the following reasons: 1) How do you handle different data types of the same size? For example, the VAX "long" and "float" data types are the same size, but have different move instructions. Why? The floating point one may fault on certain bit patterns (undefined operand) while the integer one had better not. 2) The addressing scheme assumes that every object is a power of 2 bytes in size. What do you do about structures? If their size is rounded up to the next power of 2, you may waste almost half of your memory. If their size is not rounded, then you need to come up with some way to represent a pointer to an odd-sized object that is not aligned on a power-of-two boundary; your addressing scheme does not handle this. 3) All objects must be aligned on a "natural" boundary. While I am willing to tolerate the wasted memory or address space that results from aligning a 4-byte object on a 4-byte boundary, and even the occasional movement of something up to a 512-byte or 2048-byte boundary because of hardware page sizes, I don't think anyone will tolerate the requirement that a 4Mb table be aligned on a 4Mb boundary. (If you think this is a ridiculous example, and that the scheme would never be used for large blocks, I agree, but the original article showed how the addressing scheme provided a natural method for referencing all of memory.)