Home | History | Annotate | Download | only in BaseLib
      1 /*++
      2 
      3 Copyright (c) 2004 - 2006, Intel Corporation. All rights reserved.<BR>
      4 This program and the accompanying materials
      5 are licensed and made available under the terms and conditions of the BSD License
      6 which accompanies this distribution.  The full text of the license may be found at
      7 http://opensource.org/licenses/bsd-license.php
      8 
      9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     11 
     12 
     13 Module Name:
     14 
     15   GetPowerOfTwo64.c
     16 
     17 Abstract:
     18 
     19   Math worker functions.
     20 
     21 --*/
     22 
     23 #include "BaseLibInternals.h"
     24 
     25 /**
     26   Returns the value of the highest bit set in a 64-bit value. Equivalent to
     27   1 << HighBitSet64(x).
     28 
     29   This function computes the value of the highest bit set in the 64-bit value
     30   specified by Operand. If Operand is zero, then zero is returned.
     31 
     32   @param  Operand The 64-bit operand to evaluate.
     33 
     34   @return 1 << HighBitSet64(Operand)
     35   @retval 0 Operand is zero.
     36 
     37 **/
     38 UINT64
     39 EFIAPI
     40 GetPowerOfTwo64 (
     41   IN      UINT64                    Operand
     42   )
     43 {
     44   if (Operand == 0) {
     45     return 0;
     46   }
     47 
     48   return LShiftU64 (1, (UINTN) HighBitSet64 (Operand));
     49 }
     50