A technique for implementing a data processor to determine if an exception
has been thrown. Specifically, the technique may be used in an
interpretive environment where a table known as a bytecode (upcode)
dispatch table is used. The dispatch table contains addresses for code
that implements each bytecode. When the interpreter executes normally,
these addresses point to the basic target machine code for executing each
bytecode. However, when an Asynchrounously Interrupted Exception (AIE) is
thrown, then the dispatch table is repopulated so that all byte codes
point to routines that can handle the exception. These may point to a
routine, such as an athrow, that has been extended to handle the special
case of the AIE. Alternatively, the rewritten table can point to a
routine that is specifically written to handle the firing of an AIE. The
table contents are restored to their prior state once the exception
handling is complete. The scheme may also be implemented non-rewriting of
the table if a thread is in a non-Asynchronous Transfer of Control (to
defer ATC) deferred state.