Home | History | Annotate | Download | only in Ia32
      1 /** @file
      2   Calculate the quotient of a 64-bit integer by a 32-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   Divides a 64-bit unsigned integer by a 32-bit unsigned integer and
     20   generates a 64-bit unsigned result.
     21 
     22   This function divides the 64-bit unsigned value Dividend by the 32-bit
     23   unsigned value Divisor and generates a 64-bit unsigned quotient. This
     24   function returns the 64-bit unsigned quotient.
     25 
     26   @param  Dividend  A 64-bit unsigned value.
     27   @param  Divisor   A 32-bit unsigned value.
     28 
     29   @return Dividend / Divisor
     30 
     31 **/
     32 UINT64
     33 EFIAPI
     34 InternalMathDivU64x32 (
     35   IN      UINT64                    Dividend,
     36   IN      UINT32                    Divisor
     37   )
     38 {
     39   _asm {
     40     mov     eax, dword ptr [Dividend + 4]
     41     mov     ecx, Divisor
     42     xor     edx, edx
     43     div     ecx
     44     push    eax                     ; save quotient on stack
     45     mov     eax, dword ptr [Dividend]
     46     div     ecx
     47     pop     edx                     ; restore high-order dword of the quotient
     48   }
     49 }
     50 
     51