1. A method of preserving exceptions in code reordering, the method comprising: receiving a plurality of software instructions including a software instruction at a first location within the plurality of software instructions; determining if the software instruction is an excepting instruction; inserting a control speculative version of the software instruction at a second location within the plurality of software instructions if the software instruction is an excepting instruction; replacing the software instruction at the first location with a check instruction at the first location; and generating a recovery block which branches from the check instruction, the recovery block including a copy of the software instruction.