]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Library/BaseLib/Ia32/DivU64x32Remainder.c
Code Scrub for MdePkg.
[mirror_edk2.git] / MdePkg / Library / BaseLib / Ia32 / DivU64x32Remainder.c
CommitLineData
e1f414b6 1/** @file\r
2 Set error flag for all division functions\r
3\r
4 Copyright (c) 2006 - 2007, Intel Corporation<BR>\r
5 All rights reserved. This program and the accompanying materials\r
6 are licensed and made available under the terms and conditions of the BSD License\r
7 which accompanies this distribution. The full text of the license may be found at\r
8 http://opensource.org/licenses/bsd-license.php\r
9\r
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12\r
13**/\r
14\r
15//\r
16// Include common header file for this module.\r
17//\r
f734a10a 18\r
e1f414b6 19\r
42eedea9 20/**\r
21 Divides a 64-bit unsigned integer by a 32-bit unsigned integer and\r
22 generates a 64-bit unsigned result and an optional 32-bit unsigned remainder.\r
23\r
24 This function divides the 64-bit unsigned value Dividend by the 32-bit\r
25 unsigned value Divisor and generates a 64-bit unsigned quotient. If Remainder\r
26 is not NULL, then the 32-bit unsigned remainder is returned in Remainder.\r
27 This function returns the 64-bit unsigned quotient.\r
28\r
29 @param Dividend A 64-bit unsigned value.\r
30 @param Divisor A 32-bit unsigned value.\r
31 @param Remainder A pointer to a 32-bit unsigned value. This parameter is\r
32 optional and may be NULL.\r
33\r
34 @return Dividend / Divisor\r
35\r
36**/\r
e1f414b6 37UINT64\r
38EFIAPI\r
39InternalMathDivRemU64x32 (\r
40 IN UINT64 Dividend,\r
41 IN UINT32 Divisor,\r
42 OUT UINT32 *Remainder\r
43 )\r
44{\r
45 _asm {\r
46 mov ecx, Divisor\r
47 mov eax, dword ptr [Dividend + 4]\r
48 xor edx, edx\r
49 div ecx\r
50 push eax\r
51 mov eax, dword ptr [Dividend + 0]\r
52 div ecx\r
53 mov ecx, Remainder\r
54 jecxz RemainderNull // abandon remainder if Remainder == NULL\r
55 mov [ecx], edx\r
56RemainderNull:\r
57 pop edx\r
58 }\r
59}\r
60\r