add shift optimizations in mul()