use 1 register more to save some cycles