Improving Processor Reliability Using Software Protection Techniques