1e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff/** @file
2e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  Math worker functions.
3e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
4bb817c56c51fabe92915fe30b168b4833cb2aed9hhtian  Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
5bb817c56c51fabe92915fe30b168b4833cb2aed9hhtian  This program and the accompanying materials
6e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  are licensed and made available under the terms and conditions of the BSD License
7e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  which accompanies this distribution.  The full text of the license may be found at
8127010dd965de70796f468fc0e2ab5510732048amyronporter  http://opensource.org/licenses/bsd-license.php.
9e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
10e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
13e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff**/
14e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
151efcc4ae46f52e3845923ffbab68426e068709d2vanjeff
16f734a10ab104f1072f94cab66a5489e0fd8fce8aAJFISH
17e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
18e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff#include "BaseLibInternals.h"
19e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
20e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff/**
21e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  Returns the value of the highest bit set in a 32-bit value. Equivalent to
229aa049d9717f1260426918eab2d5986e838a8754gikidy  1 << log2(x).
23e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
24e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  This function computes the value of the highest bit set in the 32-bit value
25e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  specified by Operand. If Operand is zero, then zero is returned.
26e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
27e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  @param  Operand The 32-bit operand to evaluate.
28e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
29e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  @return 1 << HighBitSet32(Operand)
30e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  @retval 0 Operand is zero.
31e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
32e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff**/
33e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeffUINT32
34e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeffEFIAPI
35e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeffGetPowerOfTwo32 (
36e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  IN      UINT32                    Operand
37e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  )
38e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff{
3938bbd3d91c38481d18c1a7e2049473c951ee98edyshang  if (0 == Operand) {
40e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff    return 0;
41e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  }
42e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff
43e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff  return 1ul << HighBitSet32 (Operand);
44e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8vanjeff}
45