Efficient Design And Implementation Of Software Thread-Level Speculation