X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=MdePkg%2FLibrary%2FBaseLib%2FMath64.c;h=5756d0fe9263ab861362b4a59636b6be16436cd4;hb=HEAD;hp=5a932ac8a57d4f57a7bf509f2a78861300d249a9;hpb=1efcc4ae46f52e3845923ffbab68426e068709d2;p=mirror_edk2.git
diff --git a/MdePkg/Library/BaseLib/Math64.c b/MdePkg/Library/BaseLib/Math64.c
index 5a932ac8a5..5756d0fe92 100644
--- a/MdePkg/Library/BaseLib/Math64.c
+++ b/MdePkg/Library/BaseLib/Math64.c
@@ -2,20 +2,11 @@
Leaf math worker functions that require 64-bit arithmetic support from the
compiler.
- Copyright (c) 2006, Intel Corporation
- All rights reserved. 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.
+ Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
-
-
-
#include "BaseLibInternals.h"
/**
@@ -28,14 +19,14 @@
@param Operand The 64-bit operand to shift left.
@param Count The number of bits to shift left.
- @return Operand << Count
+ @return Operand << Count.
**/
UINT64
EFIAPI
InternalMathLShiftU64 (
- IN UINT64 Operand,
- IN UINTN Count
+ IN UINT64 Operand,
+ IN UINTN Count
)
{
return Operand << Count;
@@ -51,14 +42,14 @@ InternalMathLShiftU64 (
@param Operand The 64-bit operand to shift right.
@param Count The number of bits to shift right.
- @return Operand >> Count
+ @return Operand >> Count.
**/
UINT64
EFIAPI
InternalMathRShiftU64 (
- IN UINT64 Operand,
- IN UINTN Count
+ IN UINT64 Operand,
+ IN UINTN Count
)
{
return Operand >> Count;
@@ -71,19 +62,17 @@ InternalMathRShiftU64 (
This function shifts the 64-bit value Operand to the right by Count bits. The
high Count bits are set to bit 63 of Operand. The shifted value is returned.
- If Count is greater than 63, then ASSERT().
-
@param Operand The 64-bit operand to shift right.
@param Count The number of bits to shift right.
- @return Operand arithmetically shifted right by Count
+ @return Operand arithmetically shifted right by Count.
**/
UINT64
EFIAPI
InternalMathARShiftU64 (
- IN UINT64 Operand,
- IN UINTN Count
+ IN UINT64 Operand,
+ IN UINTN Count
)
{
INTN TestValue;
@@ -91,7 +80,7 @@ InternalMathARShiftU64 (
//
// Test if this compiler supports arithmetic shift
//
- TestValue = (((-1) << (sizeof (-1) * 8 - 1)) >> (sizeof (-1) * 8 - 1));
+ TestValue = (INTN)((INT64)(1ULL << 63) >> 63);
if (TestValue == -1) {
//
// Arithmetic shift is supported
@@ -106,7 +95,6 @@ InternalMathARShiftU64 (
((INTN)Operand < 0 ? ~((UINTN)-1 >> Count) : 0);
}
-
/**
Rotates a 64-bit integer left between 0 and 63 bits, filling
the low bits with the high bits that were rotated.
@@ -118,14 +106,14 @@ InternalMathARShiftU64 (
@param Operand The 64-bit operand to rotate left.
@param Count The number of bits to rotate left.
- @return Operand <<< Count
+ @return Operand <<< Count.
**/
UINT64
EFIAPI
InternalMathLRotU64 (
- IN UINT64 Operand,
- IN UINTN Count
+ IN UINT64 Operand,
+ IN UINTN Count
)
{
return (Operand << Count) | (Operand >> (64 - Count));
@@ -142,14 +130,14 @@ InternalMathLRotU64 (
@param Operand The 64-bit operand to rotate right.
@param Count The number of bits to rotate right.
- @return Operand >>> Count
+ @return Operand >>> Count.
**/
UINT64
EFIAPI
InternalMathRRotU64 (
- IN UINT64 Operand,
- IN UINTN Count
+ IN UINT64 Operand,
+ IN UINTN Count
)
{
return (Operand >> Count) | (Operand << (64 - Count));
@@ -164,29 +152,29 @@ InternalMathRRotU64 (
@param Operand A 64-bit unsigned value.
- @return The byte swaped Operand.
+ @return The byte swapped Operand.
**/
UINT64
EFIAPI
InternalMathSwapBytes64 (
- IN UINT64 Operand
+ IN UINT64 Operand
)
{
UINT64 LowerBytes;
UINT64 HigherBytes;
- LowerBytes = (UINT64) SwapBytes32 ((UINT32) Operand);
- HigherBytes = (UINT64) SwapBytes32 ((UINT32) (Operand >> 32));
+ LowerBytes = (UINT64)SwapBytes32 ((UINT32)Operand);
+ HigherBytes = (UINT64)SwapBytes32 ((UINT32)(Operand >> 32));
return (LowerBytes << 32 | HigherBytes);
}
/**
- Multiples a 64-bit unsigned integer by a 32-bit unsigned integer
+ Multiplies a 64-bit unsigned integer by a 32-bit unsigned integer
and generates a 64-bit unsigned result.
- This function multiples the 64-bit unsigned value Multiplicand by the 32-bit
+ This function multiplies the 64-bit unsigned value Multiplicand by the 32-bit
unsigned value Multiplier and generates a 64-bit unsigned result. This 64-
bit unsigned result is returned.
@@ -199,33 +187,32 @@ InternalMathSwapBytes64 (
UINT64
EFIAPI
InternalMathMultU64x32 (
- IN UINT64 Multiplicand,
- IN UINT32 Multiplier
+ IN UINT64 Multiplicand,
+ IN UINT32 Multiplier
)
{
return Multiplicand * Multiplier;
}
-
/**
- Multiples a 64-bit unsigned integer by a 64-bit unsigned integer
+ Multiplies a 64-bit unsigned integer by a 64-bit unsigned integer
and generates a 64-bit unsigned result.
- This function multiples the 64-bit unsigned value Multiplicand by the 64-bit
+ This function multiplies the 64-bit unsigned value Multiplicand by the 64-bit
unsigned value Multiplier and generates a 64-bit unsigned result. This 64-
bit unsigned result is returned.
@param Multiplicand A 64-bit unsigned value.
@param Multiplier A 64-bit unsigned value.
- @return Multiplicand * Multiplier
+ @return Multiplicand * Multiplier.
**/
UINT64
EFIAPI
InternalMathMultU64x64 (
- IN UINT64 Multiplicand,
- IN UINT64 Multiplier
+ IN UINT64 Multiplicand,
+ IN UINT64 Multiplier
)
{
return Multiplicand * Multiplier;
@@ -239,25 +226,25 @@ InternalMathMultU64x64 (
unsigned value Divisor and generates a 64-bit unsigned quotient. This
function returns the 64-bit unsigned quotient.
- @param Dividend A 64-bit unsigned value.
+ @param Dividend A 64-bit unsigned value.
@param Divisor A 32-bit unsigned value.
- @return Dividend / Divisor
+ @return Dividend / Divisor.
**/
UINT64
EFIAPI
InternalMathDivU64x32 (
- IN UINT64 Dividend,
- IN UINT32 Divisor
+ IN UINT64 Dividend,
+ IN UINT32 Divisor
)
{
return Dividend / Divisor;
}
/**
- Divides a 64-bit unsigned integer by a 32-bit unsigned integer
- and generates a 32-bit unsigned remainder.
+ 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
@@ -266,14 +253,14 @@ InternalMathDivU64x32 (
@param Dividend A 64-bit unsigned value.
@param Divisor A 32-bit unsigned value.
- @return Dividend % Divisor
+ @return Dividend % Divisor.
**/
UINT32
EFIAPI
InternalMathModU64x32 (
- IN UINT64 Dividend,
- IN UINT32 Divisor
+ IN UINT64 Dividend,
+ IN UINT32 Divisor
)
{
return (UINT32)(Dividend % Divisor);
@@ -293,20 +280,21 @@ InternalMathModU64x32 (
@param Remainder A pointer to a 32-bit unsigned value. This parameter is
optional and may be NULL.
- @return Dividend / Divisor
+ @return Dividend / Divisor.
**/
UINT64
EFIAPI
InternalMathDivRemU64x32 (
- IN UINT64 Dividend,
- IN UINT32 Divisor,
- OUT UINT32 *Remainder OPTIONAL
+ IN UINT64 Dividend,
+ IN UINT32 Divisor,
+ OUT UINT32 *Remainder OPTIONAL
)
{
if (Remainder != NULL) {
*Remainder = (UINT32)(Dividend % Divisor);
}
+
return Dividend / Divisor;
}
@@ -330,44 +318,46 @@ InternalMathDivRemU64x32 (
UINT64
EFIAPI
InternalMathDivRemU64x64 (
- IN UINT64 Dividend,
- IN UINT64 Divisor,
- OUT UINT64 *Remainder OPTIONAL
+ IN UINT64 Dividend,
+ IN UINT64 Divisor,
+ OUT UINT64 *Remainder OPTIONAL
)
{
if (Remainder != NULL) {
*Remainder = Dividend % Divisor;
}
+
return Dividend / Divisor;
}
/**
Divides a 64-bit signed integer by a 64-bit signed integer and
- generates a 64-bit signed result and a optional 64-bit signed remainder.
+ generates a 64-bit signed result and an optional 64-bit signed remainder.
- This function divides the 64-bit unsigned value Dividend by the 64-bit
- unsigned value Divisor and generates a 64-bit unsigned quotient. If Remainder
- is not NULL, then the 64-bit unsigned remainder is returned in Remainder.
- This function returns the 64-bit unsigned quotient.
+ This function divides the 64-bit signed value Dividend by the 64-bit
+ signed value Divisor and generates a 64-bit signed quotient. If Remainder
+ is not NULL, then the 64-bit signed remainder is returned in Remainder.
+ This function returns the 64-bit signed quotient.
@param Dividend A 64-bit signed value.
@param Divisor A 64-bit signed value.
@param Remainder A pointer to a 64-bit signed value. This parameter is
optional and may be NULL.
- @return Dividend / Divisor
+ @return Dividend / Divisor.
**/
INT64
EFIAPI
InternalMathDivRemS64x64 (
- IN INT64 Dividend,
- IN INT64 Divisor,
- OUT INT64 *Remainder OPTIONAL
+ IN INT64 Dividend,
+ IN INT64 Divisor,
+ OUT INT64 *Remainder OPTIONAL
)
{
if (Remainder != NULL) {
*Remainder = Dividend % Divisor;
}
+
return Dividend / Divisor;
}