1 /** @file 2 Calculate the product of a 64-bit integer and another 64-bit integer 3 4 Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR> 5 This program and the accompanying materials 6 are licensed and made available under the terms and conditions of the BSD License 7 which accompanies this distribution. The full text of the license may be found at 8 http://opensource.org/licenses/bsd-license.php. 9 10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12 13 **/ 14 15 16 17 18 /** 19 Multiplies a 64-bit unsigned integer by a 64-bit unsigned integer 20 and generates a 64-bit unsigned result. 21 22 This function multiplies the 64-bit unsigned value Multiplicand by the 64-bit 23 unsigned value Multiplier and generates a 64-bit unsigned result. This 64- 24 bit unsigned result is returned. 25 26 @param Multiplicand A 64-bit unsigned value. 27 @param Multiplier A 64-bit unsigned value. 28 29 @return Multiplicand * Multiplier 30 31 **/ 32 UINT64 33 EFIAPI 34 InternalMathMultU64x64 ( 35 IN UINT64 Multiplicand, 36 IN UINT64 Multiplier 37 ) 38 { 39 _asm { 40 mov ebx, dword ptr [Multiplicand + 0] 41 mov edx, dword ptr [Multiplier + 0] 42 mov ecx, ebx 43 mov eax, edx 44 imul ebx, dword ptr [Multiplier + 4] 45 imul edx, dword ptr [Multiplicand + 4] 46 add ebx, edx 47 mul ecx 48 add edx, ebx 49 } 50 } 51 52