The inventive emulator dynamically translates instructions in code written
for a first architecture into code for a second architecture. The emulator
designates various checkpoints in the original code, and speculatively
reorders the placement of the translated code instructions according to
optimization procedures. If during the execution of the reordered code, a
trap should occur, then the emulator resets the original code to the most
recent checkpoint and begins executing the original code sequentially in a
line-by-line manner until the section is completed or branched out of. The
original code is reset by changing the program counter to the checkpoint,
and reversing the effects of each instruction which has been executed
subsequent to the checkpoint. Thus, any native instructions which
correspond to original instructions which occur sequentially prior to the
checkpoint have been executed, and any native instructions which
correspond to original instructions which occur sequentially subsequent to
the checkpoint have not been executed.
El emulador inventivo traduce dinámicamente instrucciones en el código escrito para una primera arquitectura en el código para una segunda arquitectura. El emulador señala varios puntos de comprobación en el código original, y reordena especulativo la colocación de las instrucciones traducidas del código según procedimientos de la optimización. Si durante la ejecución del código reordenado, una trampa ocurre, entonces los reajustes del emulador el código original al punto de comprobación más reciente y comienzan a ejecutar el código original secuencialmente de una manera línea por línea hasta que la sección se termina o se ramifica de. El código original es reajustado cambiando el programa opuestamente al punto de comprobación, e invirtiendo los efectos de cada instrucción que ha sido subsecuente ejecutado al punto de comprobación. Así, ninguna instrucciones nativa que corresponden a las instrucciones originales que ocurren antes del punto de comprobación se han ejecutado secuencialmente, y ninguna instrucciones nativa que corresponden a las instrucciones originales que ocurren secuencialmente subsecuente al punto de comprobación no se han ejecutado.