condensed overflow shifting code
FARK.  fixed dumb mistake where q_1 and q_2 would all get set to q_0