1. A method for accessing registers while executing instructions in a deferred-execution mode, comprising: issuing instructions for execution in program order during a normal-execution mode; upon encountering an unresolved data dependency during execution of an instruction, generating a checkpoint, which includes a checkpointed version of a register file, deferring the instruction, which involves storing the instruction along with any resolved source operands for the instruction into a deferred buffer, executing subsequent instructions in an execute-ahead mode which operates on a future version of the register file, wherein instructions that cannot be executed because of unresolved data dependencies are deferred, and wherein other non-deferred instructions are executed in program order; and if the unresolved data dependency is resolved during the execute-ahead mode, executing deferred instructions in a deferred mode, which operates on a deferred version of the register file, wherein deferred instructions which can be executed are executed in program order, and wherein other deferred instructions that still cannot be executed because of unresolved data dependencies are deferred again, and wherein if the deferred instruction writes to a destination register, executing the deferred instruction involves writing to corresponding destination registers in both the future version and the deferred version of the register file, unless the corresponding destination register in the future version has been overwritten during execute ahead-mode and is no longer subject to an unresolved data dependency, in which case the future version of the register file is not written to, otherwise, if the unresolved data dependency is not resolved during the execute-ahead mode, continuing operation in execute-ahead mode.