]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Foundation/Library/EfiCommonLib/Ia32/Log2.asm
Update the copyright notice format
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Library / EfiCommonLib / Ia32 / Log2.asm
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 ; Log2.c
15 ;
16 ;Abstract:
17 ;
18 ; 64-bit integer logarithm function for IA-32
19 ;
20 ;--*/
21 ;
22 ;---------------------------------------------------------------------------
23 .686
24 .model flat,C
25 .code
26
27 ;---------------------------------------------------------------------------
28
29 ;UINT8
30 ;Log2 (
31 ; IN UINT64 Operand
32 ; )
33 ;/*++
34 ;
35 ;Routine Description:
36 ;
37 ; Calculates and floors logarithms based on 2
38 ;
39 ;Arguments:
40 ;
41 ; Operand - value to calculate logarithm
42 ;
43 ;Returns:
44 ;
45 ; The largest integer that is less than or equal
46 ; to the logarithm of Operand based on 2
47 ;
48 ;--*/
49 Log2 PROC
50 mov ecx, 64
51
52 cmp dword ptr [esp + 4], 0 ; (UINT32 *(&Operand))
53 jne _Log2_Wend
54 cmp dword ptr [esp + 8], 0 ; (UINT32 *(&Operand)) + 1
55 jne _Log2_Wend
56 mov cl, 0FFH
57 jmp _Log2_Done
58
59 _Log2_Wend:
60 dec ecx
61 cmp ecx, 32
62 jae _Log2_Higher
63 bt [esp + 4], ecx ; (UINT32 *(&Operand))
64 jmp _Log2_Bit
65
66 _Log2_Higher:
67 mov eax, ecx
68 sub eax, 32
69 bt [esp + 8], eax ; (UINT32 *(&Operand)) + 1
70
71 _Log2_Bit:
72 jc _Log2_Done
73 jmp _Log2_Wend
74
75 _Log2_Done:
76 mov al, cl
77
78 ret
79
80 Log2 ENDP
81 END