An instruction-driven adaptive clock management through dynamic phase scaling and compiler assistance for a low power microprocessor