public void multiplyShiftDestructive(UnsignedInt128 right, short rightShifts) {
    if (this.fitsInt32() && right.fitsInt32()) {
      multiplyDestructiveFitsInt32(right, rightShifts, (short) 0);
      return;
    }

    int[] z = multiplyArrays4And4To8(this.v, right.v);
    shiftRightArray(rightShifts, z, this.v, true);
    updateCount();
  }
Multiplies this value with the given value, followed by right bit shifts to
scale it back to this object. This is used from division. This version is
destructive, meaning it modifies this object.

@param right
         the value to multiply
@param rightShifts
         the number of right-shifts after multiplication
common/src/java/org/apache/hadoop/hive/common/type/UnsignedInt128.java