]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Foundation/Library/EfiCommonLib/Ia32/GetPowerOfTwo.S
Update the copyright notice format
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Library / EfiCommonLib / Ia32 / GetPowerOfTwo.S
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 #include "EfiBind.h"
23 #---------------------------------------------------------------------------
24 .686:
25 #.MODEL flat,C
26 .code:
27
28 #---------------------------------------------------------------------------
29 .globl ASM_PFX(GetPowerOfTwo)
30 #UINT64
31 #GetPowerOfTwo (
32 # IN UINT64 Input
33 # )
34 #/*++
35 #
36 #Routine Description:
37 #
38 # Calculates the largest integer that is both
39 # a power of two and less than Input
40 #
41 #Arguments:
42 #
43 # Input - value to calculate power of two
44 #
45 #Returns:
46 #
47 # the largest integer that is both a power of
48 # two and less than Input
49 #
50 #--*/
51 ASM_PFX(GetPowerOfTwo):
52 xorl %eax, %eax
53 movl %eax, %edx
54 movl 8(%esp), %ecx # dword ptr Input[4]
55 jecxz _F
56 bsrl %ecx, %ecx
57 btsl %ecx, %edx
58 jmp _Exit
59 _F:
60 movl 4(%esp), %ecx # dword ptr Input[0]
61 jecxz _Exit
62 bsrl %ecx, %ecx
63 btsl %ecx, %eax
64 _Exit:
65
66 ret
67 #GetPowerOfTwo ENDP
68