mirror of https://github.com/acidanthera/audk.git
68 lines
1.8 KiB
NASM
68 lines
1.8 KiB
NASM
;/*++
|
|
;
|
|
;Copyright (c) 2006, Intel Corporation
|
|
;All rights reserved. This program and the accompanying materials
|
|
;are licensed and made available under the terms and conditions of the BSD License
|
|
;which accompanies this distribution. The full text of the license may be found at
|
|
;http://opensource.org/licenses/bsd-license.php
|
|
;
|
|
;THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
|
;WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|
;
|
|
;Module Name:
|
|
;
|
|
; GetPowerOfTwo.c
|
|
;
|
|
;Abstract:
|
|
;
|
|
; Calculates the largest integer that is both
|
|
; a power of two and less than Input
|
|
;
|
|
;--*/
|
|
;---------------------------------------------------------------------------
|
|
.686
|
|
.model flat,C
|
|
.code
|
|
|
|
;---------------------------------------------------------------------------
|
|
|
|
;UINT64
|
|
;GetPowerOfTwo (
|
|
; IN UINT64 Input
|
|
; )
|
|
;/*++
|
|
;
|
|
;Routine Description:
|
|
;
|
|
; Calculates the largest integer that is both
|
|
; a power of two and less than Input
|
|
;
|
|
;Arguments:
|
|
;
|
|
; Input - value to calculate power of two
|
|
;
|
|
;Returns:
|
|
;
|
|
; the largest integer that is both a power of
|
|
; two and less than Input
|
|
;
|
|
;--*/
|
|
GetPowerOfTwo PROC
|
|
xor eax, eax
|
|
mov edx, eax
|
|
mov ecx, [esp + 8] ; dword ptr Input[4]
|
|
jecxz _F
|
|
bsr ecx, ecx
|
|
bts edx, ecx
|
|
jmp _Exit
|
|
_F:
|
|
mov ecx, [esp + 4] ; dword ptr Input[0]
|
|
jecxz _Exit
|
|
bsr ecx, ecx
|
|
bts eax, ecx
|
|
_Exit:
|
|
|
|
ret
|
|
GetPowerOfTwo ENDP
|
|
END
|