4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Leaf math worker functions that require 64-bit arithmetic support from the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync compiler.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync are licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync which accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync http://opensource.org/licenses/bsd-license.php.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "BaseLibInternals.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Shifts a 64-bit integer left between 0 and 63 bits. The low bits
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync are filled with zeros. The shifted value is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function shifts the 64-bit value Operand to the left by Count bits. The
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync low Count bits are set to zero. The shifted value is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Operand The 64-bit operand to shift left.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Count The number of bits to shift left.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return Operand << Count.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINT64
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncInternalMathLShiftU64 (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 Operand,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN Count
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return Operand << Count;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Shifts a 64-bit integer right between 0 and 63 bits. This high bits
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync are filled with zeros. The shifted value is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function shifts the 64-bit value Operand to the right by Count bits. The
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync high Count bits are set to zero. The shifted value is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Operand The 64-bit operand to shift right.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Count The number of bits to shift right.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return Operand >> Count.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINT64
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncInternalMathRShiftU64 (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 Operand,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN Count
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return Operand >> Count;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Shifts a 64-bit integer right between 0 and 63 bits. The high bits
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync are filled with original integer's bit 63. The shifted value is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function shifts the 64-bit value Operand to the right by Count bits. The
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync high Count bits are set to bit 63 of Operand. The shifted value is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Operand The 64-bit operand to shift right.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Count The number of bits to shift right.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return Operand arithmetically shifted right by Count.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINT64
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncInternalMathARShiftU64 (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 Operand,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN Count
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync INTN TestValue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Test if this compiler supports arithmetic shift
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TestValue = (((-1) << (sizeof (-1) * 8 - 1)) >> (sizeof (-1) * 8 - 1));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (TestValue == -1) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Arithmetic shift is supported
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (UINT64)((INT64)Operand >> Count);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Arithmetic is not supported
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (Operand >> Count) |
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ((INTN)Operand < 0 ? ~((UINTN)-1 >> Count) : 0);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Rotates a 64-bit integer left between 0 and 63 bits, filling
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the low bits with the high bits that were rotated.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function rotates the 64-bit value Operand to the left by Count bits. The
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync low Count bits are fill with the high Count bits of Operand. The rotated
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync value is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Operand The 64-bit operand to rotate left.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Count The number of bits to rotate left.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return Operand <<< Count.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINT64
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncInternalMathLRotU64 (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 Operand,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN Count
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (Operand << Count) | (Operand >> (64 - Count));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Rotates a 64-bit integer right between 0 and 63 bits, filling
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the high bits with the high low bits that were rotated.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function rotates the 64-bit value Operand to the right by Count bits.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The high Count bits are fill with the low Count bits of Operand. The rotated
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync value is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Operand The 64-bit operand to rotate right.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Count The number of bits to rotate right.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return Operand >>> Count.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINT64
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncInternalMathRRotU64 (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 Operand,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN Count
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (Operand >> Count) | (Operand << (64 - Count));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Switches the endianess of a 64-bit integer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function swaps the bytes in a 64-bit unsigned value to switch the value
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync from little endian to big endian or vice versa. The byte swapped value is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Operand A 64-bit unsigned value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The byte swapped Operand.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINT64
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncInternalMathSwapBytes64 (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 Operand
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 LowerBytes;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 HigherBytes;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LowerBytes = (UINT64) SwapBytes32 ((UINT32) Operand);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HigherBytes = (UINT64) SwapBytes32 ((UINT32) (Operand >> 32));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (LowerBytes << 32 | HigherBytes);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Multiplies a 64-bit unsigned integer by a 32-bit unsigned integer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync and generates a 64-bit unsigned result.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function multiplies the 64-bit unsigned value Multiplicand by the 32-bit
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync unsigned value Multiplier and generates a 64-bit unsigned result. This 64-
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync bit unsigned result is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Multiplicand A 64-bit unsigned value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Multiplier A 32-bit unsigned value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return Multiplicand * Multiplier
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINT64
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncInternalMathMultU64x32 (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 Multiplicand,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 Multiplier
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return Multiplicand * Multiplier;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Multiplies a 64-bit unsigned integer by a 64-bit unsigned integer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync and generates a 64-bit unsigned result.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function multiplies the 64-bit unsigned value Multiplicand by the 64-bit
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync unsigned value Multiplier and generates a 64-bit unsigned result. This 64-
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync bit unsigned result is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Multiplicand A 64-bit unsigned value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Multiplier A 64-bit unsigned value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return Multiplicand * Multiplier.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINT64
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncInternalMathMultU64x64 (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 Multiplicand,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 Multiplier
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return Multiplicand * Multiplier;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Divides a 64-bit unsigned integer by a 32-bit unsigned integer and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync generates a 64-bit unsigned result.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function divides the 64-bit unsigned value Dividend by the 32-bit
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync unsigned value Divisor and generates a 64-bit unsigned quotient. This
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync function returns the 64-bit unsigned quotient.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Dividend A 64-bit unsigned value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Divisor A 32-bit unsigned value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return Dividend / Divisor.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINT64
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncInternalMathDivU64x32 (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 Dividend,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 Divisor
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return Dividend / Divisor;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Divides a 64-bit unsigned integer by a 32-bit unsigned integer and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync generates a 32-bit unsigned remainder.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function divides the 64-bit unsigned value Dividend by the 32-bit
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync unsigned value Divisor and generates a 32-bit remainder. This function
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync returns the 32-bit unsigned remainder.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Dividend A 64-bit unsigned value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Divisor A 32-bit unsigned value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return Dividend % Divisor.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINT32
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncInternalMathModU64x32 (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 Dividend,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 Divisor
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (UINT32)(Dividend % Divisor);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Divides a 64-bit unsigned integer by a 32-bit unsigned integer and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync generates a 64-bit unsigned result and an optional 32-bit unsigned remainder.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function divides the 64-bit unsigned value Dividend by the 32-bit
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync unsigned value Divisor and generates a 64-bit unsigned quotient. If Remainder
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync is not NULL, then the 32-bit unsigned remainder is returned in Remainder.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function returns the 64-bit unsigned quotient.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Dividend A 64-bit unsigned value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Divisor A 32-bit unsigned value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Remainder A pointer to a 32-bit unsigned value. This parameter is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync optional and may be NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return Dividend / Divisor.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINT64
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncInternalMathDivRemU64x32 (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 Dividend,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 Divisor,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT32 *Remainder OPTIONAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Remainder != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *Remainder = (UINT32)(Dividend % Divisor);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return Dividend / Divisor;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Divides a 64-bit unsigned integer by a 64-bit unsigned integer and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync generates a 64-bit unsigned result and an optional 64-bit unsigned remainder.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function divides the 64-bit unsigned value Dividend by the 64-bit
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync unsigned value Divisor and generates a 64-bit unsigned quotient. If Remainder
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync is not NULL, then the 64-bit unsigned remainder is returned in Remainder.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function returns the 64-bit unsigned quotient.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Dividend A 64-bit unsigned value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Divisor A 64-bit unsigned value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Remainder A pointer to a 64-bit unsigned value. This parameter is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync optional and may be NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return Dividend / Divisor
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINT64
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncInternalMathDivRemU64x64 (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 Dividend,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 Divisor,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT64 *Remainder OPTIONAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Remainder != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *Remainder = Dividend % Divisor;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return Dividend / Divisor;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Divides a 64-bit signed integer by a 64-bit signed integer and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync generates a 64-bit signed result and an optional 64-bit signed remainder.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function divides the 64-bit signed value Dividend by the 64-bit
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync signed value Divisor and generates a 64-bit signed quotient. If Remainder
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync is not NULL, then the 64-bit signed remainder is returned in Remainder.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function returns the 64-bit signed quotient.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Dividend A 64-bit signed value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Divisor A 64-bit signed value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Remainder A pointer to a 64-bit signed value. This parameter is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync optional and may be NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return Dividend / Divisor.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncINT64
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncInternalMathDivRemS64x64 (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN INT64 Dividend,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN INT64 Divisor,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT INT64 *Remainder OPTIONAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Remainder != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *Remainder = Dividend % Divisor;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return Dividend / Divisor;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}