• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1;/*++
2;
3;Copyright (c) 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;Module Name:
13;
14;  GetPowerOfTwo.c
15;
16;Abstract:
17;
18;  Calculates the largest integer that is both
19;  a power of two and less than Input
20;
21;--*/
22;---------------------------------------------------------------------------
23    .686
24    .model  flat,C
25    .code
26
27;---------------------------------------------------------------------------
28
29;UINT64
30;GetPowerOfTwo (
31;  IN UINT64   Input
32;  )
33;/*++
34;
35;Routine Description:
36;
37;  Calculates the largest integer that is both
38;  a power of two and less than Input
39;
40;Arguments:
41;
42;  Input  - value to calculate power of two
43;
44;Returns:
45;
46;  the largest integer that is both  a power of
47;  two and less than Input
48;
49;--*/
50GetPowerOfTwo PROC
51    xor     eax, eax
52    mov     edx, eax
53    mov     ecx, [esp + 8] ; dword ptr Input[4]
54    jecxz   _F
55    bsr     ecx, ecx
56    bts     edx, ecx
57    jmp     _Exit
58_F:
59    mov     ecx, [esp + 4] ; dword ptr Input[0]
60    jecxz   _Exit
61    bsr     ecx, ecx
62    bts     eax, ecx
63_Exit:
64
65    ret
66GetPowerOfTwo  ENDP
67	END
68