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   LowBitSet32.c
     16 
     17 Abstract:
     18 
     19   Math worker functions.
     20 
     21 --*/
     22 
     23 #include "BaseLibInternals.h"
     24 
     25 /**
     26   Returns the bit position of the lowest bit set in a 32-bit value.
     27 
     28   This function computes the bit position of the lowest bit set in the 32-bit
     29   value specified by Operand. If Operand is zero, then -1 is returned.
     30   Otherwise, a value between 0 and 31 is returned.
     31 
     32   @param  Operand The 32-bit operand to evaluate.
     33 
     34   @return Position of the lowest bit set in Operand if found.
     35   @retval -1 Operand is zero.
     36 
     37 **/
     38 INTN
     39 EFIAPI
     40 LowBitSet32 (
     41   IN      UINT32                    Operand
     42   )
     43 {
     44   INTN                              BitIndex;
     45 
     46   if (Operand == 0) {
     47     return -1;
     48   }
     49 
     50   for (BitIndex = 0; (Operand & 1) == 0; BitIndex++, Operand >>= 1);
     51   return BitIndex;
     52 }
     53