0100nnnnmmmm1100 op1 ← SignExtend32(Rm); op2 ← SignExtend32(Rn); shift_amount ← ZeroExtend5(op1); IF (op1 ≥ 0) op2 ← op2 << shift_amount; ELSE IF (shift_amount ≠ 0) op2 ← op2 >> (32 - shift_amount); ELSE IF (op2 < 0) op2 ← - 1; ELSE op2 ← 0; Rn ← Register(op2);