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**/
32UINT64
33EFIAPI
34InternalMathDivU64x32 (
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