Path: utzoo!attcan!utgpu!jarvis.csri.toronto.edu!mailrus!cs.utexas.edu!uunet!zephyr.ens.tek.com!orca!frip!andrew From: andrew@frip.WV.TEK.COM (Andrew Klossner) Newsgroups: comp.arch Subject: Re: (Im)precise exceptions Message-ID: <4833@orca.WV.TEK.COM> Date: 4 Oct 89 19:40:04 GMT References: <2353@oakhill.UUCP> <261500010@S34.Prime.COM> <34701@apple.Apple.COM> <2451@wyse.wyse.com> <477@ctycal.UUCP> <265@ssp1.idca.tds.philips.nl> <4796@orca.WV.TEK.COM> <27659@shemp.CS.UCLA.EDU> <269@ssp1.idca.tds.philips.nl> Sender: nobody@orca.WV.TEK.COM Reply-To: andrew@frip.wv.tek.com Organization: Tektronix, Wilsonville, Oregon Lines: 45 >>Fortunately the 88000 provides special registers which contain the >>necessary information for the software to complete an instruction >>that caused an imprecise exception. > ^^^^^^^^^ > >Ok, this term has been bandied about on the net before. When (precisely :-) >is an exception imprecise? When is it precise? Does it affect ones handling >of the exception? When does one need to differentiate between the two? As used in the M88k documentation, a precise exception is one which fires as the instruction begins to execute. An imprecise exception is one that fires later, possibly when subsequent instructions have already kicked off. A major distinction is that the PC points to the offending instruction on a precise exception, but for an imprecise exception you have no way of identifying that instruction. (This is an oversimplification -- there are three program counters -- but you get the idea.) The chip squirrels away enough information that you can fix up the cause of an imprecise exception and continue execution. (For example, on page fault, you get the address of the missing word, and the data if the fault was brought on by a store, or the destination register number if it was a load.) But, since the PC is missing, you can't back up and restart. Precise exceptions include: -- integer add/subtract overflow -- divide-by-zero (and integer divide-with-negative-operand, sigh) -- float-to-int overflow -- float reserved operand -- load/store to/from misaligned address (unless disabled, when it acts like the ROMP) -- unimplemented opcode -- privileged instruction (while in user mode) Imprecise exceptions include: -- page fault -- load/store of non-existent memory -- float overflow, underflow, inexact -=- Andrew Klossner (uunet!tektronix!frip.WV.TEK!andrew) [UUCP] (andrew%frip.wv.tek.com@relay.cs.net) [ARPA]