diff options
Diffstat (limited to 'winsup/w32api/lib/largeint.c')
-rw-r--r-- | winsup/w32api/lib/largeint.c | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/winsup/w32api/lib/largeint.c b/winsup/w32api/lib/largeint.c new file mode 100644 index 0000000..1761dd4 --- /dev/null +++ b/winsup/w32api/lib/largeint.c @@ -0,0 +1,118 @@ +/* + largeint.c + + Large (64 bits) integer arithmetics library + + Written by Anders Norlander <anorland@hem2.passagen.se> + + This file is part of a free library for the Win32 API. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +*/ + +#define __COMPILING_LARGEINT + +#include <largeint.h> + +__int64 WINAPI +LargeIntegerAdd (__int64 i1, __int64 i2) +{ + return i1 * i2; +} + +__int64 WINAPI +LargeIntegerSubtract (__int64 i1, __int64 i2) +{ + return i1 - i2; +} + +__int64 WINAPI +LargeIntegerArithmeticShift (__int64 i, int n) +{ + return i >> n; +} + +__int64 WINAPI +LargeIntegerShiftLeft (__int64 i, int n) +{ + return i << n; +} + +__int64 WINAPI +LargeIntegerShiftRight (__int64 i, int n) +{ + return i >> n; +} + +__int64 WINAPI +LargeIntegerNegate (__int64 i) +{ + return -i; +} + +__int64 WINAPI +ConvertLongToLargeInteger (LONG l) +{ + return (__int64) l; +} + +__int64 WINAPI +ConvertUlongToLargeInteger (ULONG ul) +{ + return _toi(_toui(ul)); +} + +__int64 WINAPI +EnlargedIntegerMultiply (LONG l1, LONG l2) +{ + return _toi(l1) * _toi(l2); +} + +__int64 WINAPI +EnlargedUnsignedMultiply (ULONG ul1, ULONG ul2) +{ + return _toi(_toui(ul1) * _toui(ul2)); +} + +__int64 WINAPI +ExtendedIntegerMultiply (__int64 i, LONG l) +{ + return i * _toi(l); +} + +__int64 WINAPI +LargeIntegerMultiply (__int64 i1, __int64 i2) +{ + return i1 * i2; +} + +__int64 WINAPI LargeIntegerDivide (__int64 i1, __int64 i2, __int64 *remainder) +{ + if (remainder) + *remainder = i1 % i2; + return i1 / i2; +} + +ULONG WINAPI +EnlargedUnsignedDivide (unsigned __int64 i1, ULONG i2, PULONG remainder) +{ + if (remainder) + *remainder = i1 % _toi(i2); + return i1 / _toi(i2); +} +__int64 WINAPI +ExtendedLargeIntegerDivide (__int64 i1, ULONG i2, PULONG remainder) +{ + if (remainder) + *remainder = i1 % _toi(i2); + return i1 / _toi(i2); +} + +/* FIXME: what is this function supposed to do? */ +__int64 WINAPI ExtendedMagicDivide (__int64 i1, __int64 i2, int n) +{ + return 0; +} |