docs: public long add(long instant, long months) {
          int i_months = (int)months;
          if (i_months == months) {
              return add(instant, i_months);
          }
  
          // Copied from add(long, int) and modified slightly:
  
          long timePart = iChronology.getMillisOfDay(instant);
  
          int thisYear = iChronology.getYear(instant);
          int thisMonth = iChronology.getMonthOfYear(instant, thisYear);
  
          long yearToUse;
          long monthToUse = thisMonth - 1 + months;
          if (monthToUse >= 0) {
              yearToUse = thisYear + (monthToUse / iMax);
              monthToUse = (monthToUse % iMax) + 1;
          } else {
              yearToUse = thisYear + (monthToUse / iMax) - 1;
              monthToUse = Math.abs(monthToUse);
              int remMonthToUse = (int)(monthToUse % iMax);
              if (remMonthToUse == 0) {
                  remMonthToUse = iMax;
              }
              monthToUse = iMax - remMonthToUse + 1;
              if (monthToUse == 1) {
                  yearToUse += 1;
              }
          }
  
          if (yearToUse < iChronology.getMinYear() ||
              yearToUse > iChronology.getMaxYear()) {
  
              throw new IllegalArgumentException
                  ("Magnitude of add amount is too large: " + months);
          }
  
          int i_yearToUse = (int)yearToUse;
          int i_monthToUse = (int)monthToUse;
  
          int dayToUse = iChronology.getDayOfMonth(instant, thisYear, thisMonth);
          int maxDay = iChronology.getDaysInYearMonth(i_yearToUse, i_monthToUse);
          if (dayToUse > maxDay) {
              dayToUse = maxDay;
          }
  
          long datePart =
              iChronology.getYearMonthDayMillis(i_yearToUse, i_monthToUse, dayToUse);
          return datePart + timePart;
      }