diff options
author | Warner Losh <imp@FreeBSD.org> | 2017-03-07 20:53:26 +0000 |
---|---|---|
committer | Warner Losh <imp@FreeBSD.org> | 2017-03-07 20:53:26 +0000 |
commit | 0499b37cea9ca98acfe36368e521ad36b7783f2d (patch) | |
tree | 7968fdc8d6edf3e051bbd434a466eca88aacf938 /MdePkg/Library/BaseLib/Ia32/ModU64x32.c |
Notes
Diffstat (limited to 'MdePkg/Library/BaseLib/Ia32/ModU64x32.c')
-rw-r--r-- | MdePkg/Library/BaseLib/Ia32/ModU64x32.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/MdePkg/Library/BaseLib/Ia32/ModU64x32.c b/MdePkg/Library/BaseLib/Ia32/ModU64x32.c new file mode 100644 index 0000000000000..3186ccb2a2651 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/ModU64x32.c @@ -0,0 +1,48 @@ +/** @file + Calculate the remainder of a 64-bit integer by a 32-bit integer + + Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR> + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php. + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + + + + +/** + Divides a 64-bit unsigned integer by a 32-bit unsigned integer and + generates a 32-bit unsigned remainder. + + This function divides the 64-bit unsigned value Dividend by the 32-bit + unsigned value Divisor and generates a 32-bit remainder. This function + returns the 32-bit unsigned remainder. + + @param Dividend A 64-bit unsigned value. + @param Divisor A 32-bit unsigned value. + + @return Dividend % Divisor + +**/ +UINT32 +EFIAPI +InternalMathModU64x32 ( + IN UINT64 Dividend, + IN UINT32 Divisor + ) +{ + _asm { + mov eax, dword ptr [Dividend + 4] + mov ecx, Divisor + xor edx, edx + div ecx + mov eax, dword ptr [Dividend + 0] + div ecx + mov eax, edx + } +} |