andrew@frip.gwd.tek.com (Andrew Klossner) (11/25/87)
"As for the mode bit, we thought about it and discarded it as
ugly. The same effect can be had ..."
An example of a program that doesn't readily compile to your architecture:
pgm: procedure options(main);
add: procedure(a, b, c);
dcl (a, b, c) fixed bin(31);
c = a+b;
end;
declare (a, b, c) fixed bin(31);
a = 2147483647;
b = 2147483647;
on overflow snap begin;
put list("Overflow, aborting");
stop;
end;
/* This statement should invoke the overflow handler. */
call add(a,b,c);
on overflow; /* Disable overflow exception. */
/* This statement should not invoke any overflow handler. */
call add(a,b,c);
end;
The idea is that, in translating a language with dynamic mapping of
exceptions to exception handlers like PL/I and BASIC, the same routine
(in this case "add") may need to do both exception-causing arithmetic
and exception-free arithmetic depending on the program's history (in
this case, the most recently executed "on overflow" statement.)
Here, the natural way to implement "on overflow;" (the
turn-off-overflows instruction) is to turn on or off the mode bit.
Without a mode bit, you have to build a trap handler which does nothing
but return, and you take a performance hit.
-=- Andrew Klossner (decvax!tektronix!tekecs!andrew) [UUCP]
(andrew%tekecs.tek.com@relay.cs.net) [ARPA]bcase@apple.UUCP (Brian Case) (12/01/87)
In article <9416@tekecs.TEK.COM> andrew@frip.gwd.tek.com (Andrew Klossner) writes: > > "As for the mode bit, we thought about it and discarded it as > ugly. The same effect can be had ..." > [An example of a program that has two invocations of a procedure that can cause overflow, but overflow handling is enabled on only one of the invocations.] >The idea is that, in translating a language with dynamic mapping of >exceptions to exception handlers like PL/I and BASIC, the same routine >(in this case "add") may need to do both exception-causing arithmetic >and exception-free arithmetic depending on the program's history (in >this case, the most recently executed "on overflow" statement.) > >Here, the natural way to implement "on overflow;" (the >turn-off-overflows instruction) is to turn on or off the mode bit. >Without a mode bit, you have to build a trap handler which does nothing >but return, and you take a performance hit. Yeah. There is a way, though, to do this without the overhead of the null trap handler: have the compiler build two versions of the procedure and invoke the right one. I didn't say it was pretty, just that it would work :-).