Software-Implemented Hardware Fault Tolerance