2 * Copyright (C) 1998, 1989 Transarc Corporation - All rights reserved
4 * (C) COPYRIGHT IBM CORPORATION 1987, 1988
5 * LICENSED MATERIALS - PROPERTY OF IBM
9 /* Copyright (C) 1994 Cazamar Systems, Inc. */
11 #include <afs/param.h>
20 #if (_MSC_VER >= 1300)
21 LARGE_INTEGER LargeIntegerAdd(LARGE_INTEGER a, LARGE_INTEGER b)
25 result.LowPart=a.LowPart+b.LowPart;
26 carry=(result.LowPart < b.LowPart) ? 1 : 0;
27 result.HighPart=a.HighPart+b.HighPart+ carry;
30 LARGE_INTEGER LargeIntegerSubtract(LARGE_INTEGER a, LARGE_INTEGER b)
34 result.LowPart=a.LowPart-b.LowPart;
35 borrow=(result.LowPart > a.LowPart) ? 1 : 0;
36 result.HighPart=a.HighPart-b.HighPart- borrow;
39 LARGE_INTEGER ExtendedLargeIntegerDivide(LARGE_INTEGER a, unsigned long b, unsigned long *remainder)
46 if (b == 0) { return result; }
47 if (b == 1) { *remainder = 0; return a; }
54 if (r1 > ULONG_MAX) /*XXX */;
55 result.HighPart=(LONG)(q1 >> 32);
56 result.LowPart=(DWORD)(q1 & 0xffffffff);
57 *remainder=(unsigned long)(r1 & 0xffffffff);
60 LARGE_INTEGER LargeIntegerDivide(LARGE_INTEGER a, LARGE_INTEGER b, LARGE_INTEGER *remainder)
63 ULONGLONG a1,b1,q1,r1;
67 if (b.HighPart == 0 && b.LowPart == 0) { return result; }
68 if (b.HighPart == 0 && b.LowPart == 1) {
69 remainder->HighPart = 0;
70 remainder->LowPart = 0;
82 result.HighPart=(LONG)(q1 >> 32);
83 result.LowPart=(DWORD)(q1 & 0xffffffff);
84 remainder->HighPart=(LONG)(r1 >> 32);
85 remainder->LowPart=(DWORD)(r1 & 0xffffffff);
89 LARGE_INTEGER ConvertLongToLargeInteger(unsigned long a)