Exploiting Adaptive Techniques to Improve Processor Energy Efficiency