X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=OldMdePkg%2FLibrary%2FBaseLib%2FIa32%2FLShiftU64.c;fp=OldMdePkg%2FLibrary%2FBaseLib%2FIa32%2FLShiftU64.c;h=193a41222f9a8c53c48f5ad65d3df0c552602ee4;hp=0000000000000000000000000000000000000000;hb=586cd1f1f4129ab7ec24543d4968801e17cc870b;hpb=144d783d40c8a02113350feabd1b9a55b692313f diff --git a/OldMdePkg/Library/BaseLib/Ia32/LShiftU64.c b/OldMdePkg/Library/BaseLib/Ia32/LShiftU64.c new file mode 100644 index 0000000000..193a41222f --- /dev/null +++ b/OldMdePkg/Library/BaseLib/Ia32/LShiftU64.c @@ -0,0 +1,33 @@ +/** @file + 64-bit left shift function for IA-32. + + Copyright (c) 2006 - 2007, 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. + +**/ + +UINT64 +EFIAPI +InternalMathLShiftU64 ( + IN UINT64 Operand, + IN UINTN Count + ) +{ + _asm { + mov cl, byte ptr [Count] + xor eax, eax + mov edx, dword ptr [Operand + 0] + test cl, 32 // Count >= 32? + cmovz eax, edx + cmovz edx, dword ptr [Operand + 4] + shld edx, eax, cl + shl eax, cl + } +} +