aboutsummaryrefslogtreecommitdiff
path: root/winsup/w32api/lib/largeint.c
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/w32api/lib/largeint.c')
-rw-r--r--winsup/w32api/lib/largeint.c118
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;
+}