]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/BaseLib/Ia32/LRotU64.c
1e37dda2bda5b7d29c5ee12911c9dad575e42fbc
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Library / EdkIIGlueLib / Library / BaseLib / Ia32 / LRotU64.c
1 /*++
2
3 Copyright (c) 2004 - 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
13 Module Name:
14
15 LRotU64.c
16
17 Abstract:
18
19
20
21 --*/
22
23 #include "BaseLibInternals.h"
24
25 UINT64
26 EFIAPI
27 InternalMathLRotU64 (
28 IN UINT64 Operand,
29 IN UINTN Count
30 )
31 {
32 _asm {
33 mov cl, byte ptr [Count]
34 mov edx, dword ptr [Operand + 4]
35 mov eax, dword ptr [Operand + 0]
36 shld ebx, edx, cl
37 shld edx, eax, cl
38 ror ebx, cl
39 shld eax, ebx, cl
40 test cl, 32 ; Count >= 32?
41 cmovnz ecx, eax
42 cmovnz eax, edx
43 cmovnz edx, ecx
44 }
45 }
46