+ ULONGLONG dividend_high;
+ ULONGLONG dividend_low;
+ ULONGLONG inverse_divisor_high;
+ ULONGLONG inverse_divisor_low;
+ ULONGLONG ah_bl;
+ ULONGLONG al_bh;
+ LARGE_INTEGER result;
+ BOOLEAN positive;
+
+ if (Dividend.QuadPart < 0)
+ {
+ dividend_high = UPPER_32((ULONGLONG) -Dividend.QuadPart);
+ dividend_low = LOWER_32((ULONGLONG) -Dividend.QuadPart);
+ positive = FALSE;
+ }
+ else
+ {
+ dividend_high = UPPER_32((ULONGLONG) Dividend.QuadPart);
+ dividend_low = LOWER_32((ULONGLONG) Dividend.QuadPart);
+ positive = TRUE;
+ }
+ inverse_divisor_high = UPPER_32((ULONGLONG) MagicDivisor.QuadPart);
+ inverse_divisor_low = LOWER_32((ULONGLONG) MagicDivisor.QuadPart);
+
+ ah_bl = dividend_high * inverse_divisor_low;
+ al_bh = dividend_low * inverse_divisor_high;
+
+ result.QuadPart =
+ (LONGLONG) ((dividend_high * inverse_divisor_high +
+ UPPER_32(ah_bl) +
+ UPPER_32(al_bh) +
+ UPPER_32(LOWER_32(ah_bl) + LOWER_32(al_bh) +
+ UPPER_32(dividend_low * inverse_divisor_low))) >> ShiftCount);
+ if (!positive)
+ {
+ result.QuadPart = -result.QuadPart;
+ }
+
+ return result;