home *** CD-ROM | disk | FTP | other *** search
- /*--
-
- Module Name:
-
- largeint.h
-
- Abstract:
-
- Include file for sample Large Integer Arithmetic routines.
- This file includes all of the prototypes for the routines found in
- largeint.lib. For complete descriptions of these functions, see the
- largeint.s source file for MIPS, or the divlarge.c and largeint.asm
- source files for x86.
-
- Revision History:
-
- --*/
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- //
- //Large integer arithmetic routines.
- //
-
- //
- // Large integer add - 64-bits + 64-bits -> 64-bits
- //
-
- LARGE_INTEGER
- WINAPI
- LargeIntegerAdd (
- LARGE_INTEGER Addend1,
- LARGE_INTEGER Addend2
- );
-
- //
- // Enlarged integer multiply - 32-bits * 32-bits -> 64-bits
- //
-
- LARGE_INTEGER
- WINAPI
- EnlargedIntegerMultiply (
- LONG Multiplicand,
- LONG Multiplier
- );
-
- //
- // Unsigned enlarged integer multiply - 32-bits * 32-bits -> 64-bits
- //
-
- LARGE_INTEGER
- WINAPI
- EnlargedUnsignedMultiply (
- ULONG Multiplicand,
- ULONG Multiplier
- );
-
- //
- // Enlarged integer divide - 64-bits / 32-bits > 32-bits
- //
-
- ULONG
- WINAPI
- EnlargedUnsignedDivide (
- IN ULARGE_INTEGER Dividend,
- IN ULONG Divisor,
- IN PULONG Remainder
- );
-
- //
- // Extended large integer magic divide - 64-bits / 32-bits -> 64-bits
- //
-
- LARGE_INTEGER
- WINAPI
- ExtendedMagicDivide (
- LARGE_INTEGER Dividend,
- LARGE_INTEGER MagicDivisor,
- CCHAR ShiftCount
- );
-
- //
- // Large Integer divide - 64-bits / 32-bits -> 64-bits
- //
-
- LARGE_INTEGER
- WINAPI
- ExtendedLargeIntegerDivide (
- LARGE_INTEGER Dividend,
- ULONG Divisor,
- PULONG Remainder
- );
-
- //
- // Large Integer divide - 64-bits / 32-bits -> 64-bits
- //
-
- LARGE_INTEGER
- WINAPI
- LargeIntegerDivide (
- LARGE_INTEGER Dividend,
- LARGE_INTEGER Divisor,
- PLARGE_INTEGER Remainder
- );
-
- //
- // Extended integer multiply - 32-bits * 64-bits -> 64-bits
- //
-
- LARGE_INTEGER
- WINAPI
- ExtendedIntegerMultiply (
- LARGE_INTEGER Multiplicand,
- LONG Multiplier
- );
-
- //
- // Large integer negation - -(64-bits)
- //
-
- LARGE_INTEGER
- WINAPI
- LargeIntegerNegate (
- LARGE_INTEGER Subtrahend
- );
-
- //
- // Large integer subtract - 64-bits - 64-bits -> 64-bits.
- //
-
- LARGE_INTEGER
- WINAPI
- LargeIntegerSubtract (
- LARGE_INTEGER Minuend,
- LARGE_INTEGER Subtrahend
- );
-
- //
- // Large integer and - 64-bite & 64-bits -> 64-bits.
- //
-
- #define LargeIntegerAnd(Result, Source, Mask) \
- { \
- Result.HighPart = Source.HighPart & Mask.HighPart; \
- Result.LowPart = Source.LowPart & Mask.LowPart; \
- }
-
-
- //
- // Large integer conversion routines.
- //
-
- //
- // Convert signed integer to large integer.
- //
-
- LARGE_INTEGER
- WINAPI
- ConvertLongToLargeInteger (
- LONG SignedInteger
- );
-
- //
- // Convert unsigned integer to large integer.
- //
-
- LARGE_INTEGER
- WINAPI
- ConvertUlongToLargeInteger (
- ULONG UnsignedInteger
- );
-
-
- //
- // Large integer shift routines.
- //
-
- LARGE_INTEGER
- WINAPI
- LargeIntegerShiftLeft (
- LARGE_INTEGER LargeInteger,
- CCHAR ShiftCount
- );
-
- LARGE_INTEGER
- WINAPI
- LargeIntegerShiftRight (
- LARGE_INTEGER LargeInteger,
- CCHAR ShiftCount
- );
-
- LARGE_INTEGER
- WINAPI
- LargeIntegerArithmeticShift (
- LARGE_INTEGER LargeInteger,
- CCHAR ShiftCount
- );
-
- #define LargeIntegerGreaterThan(X,Y) ( \
- (((X).HighPart == (Y).HighPart) && ((X).LowPart > (Y).LowPart)) || \
- ((X).HighPart > (Y).HighPart) \
- )
-
- #define LargeIntegerGreaterThanOrEqualTo(X,Y) ( \
- (((X).HighPart == (Y).HighPart) && ((X).LowPart >= (Y).LowPart)) || \
- ((X).HighPart > (Y).HighPart) \
- )
-
- #define LargeIntegerEqualTo(X,Y) ( \
- !(((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)) \
- )
-
- #define LargeIntegerNotEqualTo(X,Y) ( \
- (((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)) \
- )
-
- #define LargeIntegerLessThan(X,Y) ( \
- (((X).HighPart == (Y).HighPart) && ((X).LowPart < (Y).LowPart)) || \
- ((X).HighPart < (Y).HighPart) \
- )
-
- #define LargeIntegerLessThanOrEqualTo(X,Y) ( \
- (((X).HighPart == (Y).HighPart) && ((X).LowPart <= (Y).LowPart)) || \
- ((X).HighPart < (Y).HighPart) \
- )
-
- #define LargeIntegerGreaterThanZero(X) ( \
- (((X).HighPart == 0) && ((X).LowPart > 0)) || \
- ((X).HighPart > 0 ) \
- )
-
- #define LargeIntegerGreaterOrEqualToZero(X) ( \
- (X).HighPart >= 0 \
- )
-
- #define LargeIntegerEqualToZero(X) ( \
- !((X).LowPart | (X).HighPart) \
- )
-
- #define LargeIntegerNotEqualToZero(X) ( \
- ((X).LowPart | (X).HighPart) \
- )
-
- #define LargeIntegerLessThanZero(X) ( \
- ((X).HighPart < 0) \
- )
-
- #define LargeIntegerLessOrEqualToZero(X) ( \
- ((X).HighPart < 0) || !((X).LowPart | (X).HighPart) \
- )
-
- #ifdef __cplusplus
- }
- #endif
-
-