Micro-architectural Countermeasures for Control Flow and Misspeculation Based Software Attacks