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; }
49 a1=(a.HighPart << 32) | a.LowPart;
52 if (r1 > ULONG_MAX) /*XXX */;
53 result.HighPart=q1 >> 32;
54 result.LowPart=q1 & 0xffffffff;
55 *remainder=r1 & 0xffffffff;
58 LARGE_INTEGER LargeIntegerDivide(LARGE_INTEGER a, LARGE_INTEGER b, LARGE_INTEGER *remainder)
61 ULONGLONG a1,b1,q1,r1;
65 if (b.HighPart == 0 && b.LowPart == 0) { return result; }
66 if (b.HighPart == 0 && b.LowPart == 1) {
67 remainder->HighPart = 0;
68 remainder->LowPart = 0;
72 a1=(a.HighPart << 32) | a.LowPart;
73 b1=(b.HighPart << 32) | a.LowPart;
76 result.HighPart=q1 >> 32;
77 result.LowPart=q1 & 0xffffffff;
78 remainder->HighPart=r1 >> 32;
79 remainder->LowPart=r1 & 0xffffffff;
83 LARGE_INTEGER ConvertLongToLargeInteger(unsigned long a)