• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
InternalMathDivU64x32(IN UINT64 Dividend,IN UINT32 Divisor)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