A translating software emulator designed for converting code from a legacy
system to a target system and fully preserving the synchronous exception
state while still allowing for full and aggressive optimization in the
translation. A user application is translated to a target system using
full optimization techniques. The translation may be done dynamically by
an emulator emulating the legacy system on the target system, or the
translation may be a static translation or a compilation, fully generating
a new executable program operable on the target system. The invention
recovers from the exception properly by restoring the target machine state
to the machine state expected by the legacy system. This recovery is done
by using an exception delivery mechanism to restore the machine state of
the target system before executing the exception handling code. The
restoration of the machine state is done by executing a recovery block
generated by the translation that modifies the machine state to match the
legacy machine state.
Un emulatore di traduzione del software ha progettato per il codice convertentesi da un sistema dell'eredità ad un sistema di obiettivi e completamente conservando l'eccezione sincrona dichiari mentre ancora tengono conto l'ottimizzazione completa ed aggressiva nella traduzione. Un'applicazione dell'utente è tradotta ad un sistema di obiettivi usando le tecniche complete di ottimizzazione. La traduzione può essere fatta dinamicamente da un emulatore che emula il sistema dell'eredità sul sistema di obiettivi, o la traduzione può essere una traduzione statica o una compilazione, completamente generante un nuovo programma eseguibile operabile sul sistema di obiettivi. L'invenzione recupera dall'eccezione correttamente ristabilendo la macchina di obiettivo dichiara alla macchina dichiara previsto dal sistema dell'eredità. Questo recupero è fatto usando una procedura di pubblicazione di eccezione per ristabilire la macchina dichiara del sistema di obiettivi prima dell'esecuzione del codice di trattamento di eccezioni. Il ripristino della macchina dichiara è fatto eseguendo un blocchetto di recupero generato tramite la traduzione che modifica la macchina dichiara per abbinare la macchina dell'eredità dichiara.