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; }