From e1f414b6a7d8a0424e0e01f655b09a4612b4d0e8 Mon Sep 17 00:00:00 2001 From: vanjeff Date: Fri, 22 Jun 2007 03:21:45 +0000 Subject: Import some basic libraries instances for Mde Packages. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2704 6f19259b-4bc3-4df7-8a09-765794883524 --- MdePkg/Library/BaseLib/Ia32/LShiftU64.c | 38 +++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 MdePkg/Library/BaseLib/Ia32/LShiftU64.c (limited to 'MdePkg/Library/BaseLib/Ia32/LShiftU64.c') diff --git a/MdePkg/Library/BaseLib/Ia32/LShiftU64.c b/MdePkg/Library/BaseLib/Ia32/LShiftU64.c new file mode 100644 index 0000000000..766b33b097 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/LShiftU64.c @@ -0,0 +1,38 @@ +/** @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. + +**/ + +// +// Include common header file for this module. +// +#include "CommonHeader.h" + +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 + } +} + -- cgit v1.2.3