|
|
1.1 ! root 1: /******************************Module*Header*******************************\ ! 2: * Module Name: equad.cxx * ! 3: * * ! 4: * Created: 26-Apr-1991 13:01:08 * ! 5: * Author: Kirk Olynyk [kirko] * ! 6: * * ! 7: * Copyright (c) 1991 Microsoft Corporation * ! 8: * * ! 9: \**************************************************************************/ ! 10: ! 11: #include "stddef.h" ! 12: #include "windows.h" ! 13: #include "debug.h" ! 14: #include "equad.hxx" ! 15: ! 16: /******************************Member*Function*****************************\ ! 17: * VOID EUQUAD::vMulInit(ULONG ul1,ULONG ul2) ! 18: * ! 19: * History: ! 20: * Mon 21-Oct-1991 11:37:26 by Kirk Olynyk [kirko] ! 21: * Wrote it. ! 22: \**************************************************************************/ ! 23: ! 24: VOID EUQUAD::vMulInit(ULONG ul1,ULONG ul2) ! 25: { ! 26: ! 27: // Use the Rtl signed multiply routine for the lowest 31-bits of each ! 28: // argument ! 29: ! 30: *(LARGE_INTEGER*) this = ! 31: RtlEnlargedIntegerMultiply( ! 32: (LONG) ul1 & ~0x80000000, ! 33: (LONG) ul2 & ~0x80000000 ! 34: ); ! 35: ! 36: EUQUAD euqT; ! 37: euqT.LowPart = 0; ! 38: euqT.HighPart = 0; ! 39: ! 40: euqT.LowPart += (ul1 & 0x80000000) ? ul2: 0; ! 41: euqT.LowPart += (ul2 & 0x80000000) ? ul1: 0; ! 42: euqT.LowPart += (ul1 & ul2 & 0x80000000) ? 0x80000000 : 0; ! 43: ! 44: if (!euqT.bZero()) ! 45: { ! 46: euqT <<= 31; ! 47: *this += *(EUQUAD*) &euqT; ! 48: } ! 49: } ! 50: ! 51:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.