Home | History | Annotate | Download | only in Ia32
      1 /** @file
      2   Calculate the product of a 64-bit integer and a 32-bit integer
      3 
      4   Copyright (c) 2006 - 2008, 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   Multiples a 64-bit unsigned integer by a 32-bit unsigned integer
     20   and generates a 64-bit unsigned result.
     21 
     22   This function multiples the 64-bit unsigned value Multiplicand by the 32-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 32-bit unsigned value.
     28 
     29   @return Multiplicand * Multiplier
     30 
     31 **/
     32 UINT64
     33 EFIAPI
     34 InternalMathMultU64x32 (
     35   IN      UINT64                    Multiplicand,
     36   IN      UINT32                    Multiplier
     37   )
     38 {
     39   _asm {
     40     mov     ecx, Multiplier
     41     mov     eax, ecx
     42     imul    ecx, dword ptr [Multiplicand + 4]  // overflow not detectable
     43     mul     dword ptr [Multiplicand + 0]
     44     add     edx, ecx
     45   }
     46 }
     47 
     48