private void multiplyDestructiveFitsInt32(UnsignedInt128 right,
      short rightShifts, short tenScaleDown) {
    assert (this.fitsInt32() && right.fitsInt32());
    assert (rightShifts == 0 || tenScaleDown == 0); // only one of them
    if (this.isZero()) {
      return; // zero. no need to shift/scale
    } else if (right.isZero()) {
      zeroClear();
      return; // zero. no need to shift/scale
    } else if (this.isOne()) {
      this.update(right);
    } else {
      this.multiplyDestructive(right.v[0]);
    }

    if (rightShifts > 0) {
      this.shiftRightDestructive(rightShifts, true);
    } else if (tenScaleDown > 0) {
      this.scaleDownTenDestructive(tenScaleDown);
    }
  }
helper method for multiplication. used when either left/right fits int32.
common/src/java/org/apache/hadoop/hive/common/type/UnsignedInt128.java