Home | History | Annotate | Download | only in Ia32
      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