Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!ucbvax!decwrl!decvax!tektronix!tekecs!frip!andrew From: andrew@frip.gwd.tek.com (Andrew Klossner) Newsgroups: comp.arch Subject: Re: Not-so RISCy Message-ID: <11040@tekecs.TEK.COM> Date: 20 Feb 89 16:46:10 GMT References: <732@wpi.WPI.EDU> Sender: andrew@tekecs.TEK.COM Organization: Tektronix, Wilsonville, Oregon Lines: 28 [] "Would it be a terrible hardship to only have two data sizes (perhaps character and word) and not allow words to cross word boundaries?" Data sizes: you need do atomic 8-bit, 16-bit, and 32-bit loads and stores in order to deal with all the sorts of device registers you might meet. No crossing boundaries: absolutely. My favorite machines prohibit this. I find it useful for detecting garbaged pointers while debugging. Also, it's quite convenient for the kernel if an instruction can't reference more than one page, which wouldn't be so if a load could refer to a word that starts in one page and ends in another. On the down side, this breaks a lot of existing code. A pathological case is the Fortran program that uses EQUIVALENCE statements to do its own memory allocation (there being no such facility in the language), and which "knows" that a double can be equivalenced to any integer. This gives rise to double references at addresses that are not multiples of eight bytes. One workaround is to have the Fortran compiler fall back to using two single-word operations to fetch or store a double. -=- Andrew Klossner (uunet!tektronix!orca!frip!andrew) [UUCP] (andrew%frip.wv.tek.com@relay.cs.net) [ARPA]