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
InternalMathMultU64x64(IN UINT64 Multiplicand,IN UINT64 Multiplier)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