From c1ea912c6c9e573c855eb437234e45a3b340a6b9 Mon Sep 17 00:00:00 2001 From: qwang12 Date: Sat, 23 Aug 2008 06:48:07 +0000 Subject: [PATCH 1/1] 1) add in EfiCommonLib_Edk2.inf which will allow EfiCommonLib to build understand GCC and ICC tool-chain. 2) Add in 3 .asm files for ICC tool-chain. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5714 6f19259b-4bc3-4df7-8a09-765794883524 --- .../EfiCommonLib/EfiCommonLib_Edk2.inf | 116 ++++++++++++++++++ .../EfiCommonLib/Ia32/EfiCopyMemRep1.asm | 86 +++++++++++++ .../EfiCommonLib/Ia32/EfiSetMemRep4.asm | 75 +++++++++++ .../EfiCommonLib/Ia32/EfiZeroMemRep4.asm | 70 +++++++++++ 4 files changed, 347 insertions(+) create mode 100644 EdkCompatibilityPkg/Foundation/Library/EfiCommonLib/EfiCommonLib_Edk2.inf create mode 100644 EdkCompatibilityPkg/Foundation/Library/EfiCommonLib/Ia32/EfiCopyMemRep1.asm create mode 100644 EdkCompatibilityPkg/Foundation/Library/EfiCommonLib/Ia32/EfiSetMemRep4.asm create mode 100644 EdkCompatibilityPkg/Foundation/Library/EfiCommonLib/Ia32/EfiZeroMemRep4.asm diff --git a/EdkCompatibilityPkg/Foundation/Library/EfiCommonLib/EfiCommonLib_Edk2.inf b/EdkCompatibilityPkg/Foundation/Library/EfiCommonLib/EfiCommonLib_Edk2.inf new file mode 100644 index 0000000000..14e9e6b71c --- /dev/null +++ b/EdkCompatibilityPkg/Foundation/Library/EfiCommonLib/EfiCommonLib_Edk2.inf @@ -0,0 +1,116 @@ +#/*++ +# +# Copyright (c) 2004 - 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. +# +# Module Name: +# +# EfiCommonLib.inf +# +# Abstract: +# +# Component description file for the EFI common library. +# +#--*/ + +[defines] +BASE_NAME = EfiCommonLib +COMPONENT_TYPE = LIBRARY + +[sources.common] + EfiCompareGuid.c + EfiCompareMem.c + ReportStatusCode.c + PostCode.c + String.c + ValueToString.c + LinkedList.c + +[sources.ia32] + Ia32/EfiCopyMemRep1.c | MSFT + Ia32/EfiSetMemRep4.c | MSFT + Ia32/EfiZeroMemRep4.c | MSFT +# Ia32/EfiCopyMem.c +# Ia32/EfiSetMem.c +# Ia32/EfiZeroMem.c + Ia32/LShiftU64.c | MSFT + Ia32/RShiftU64.c | MSFT + Ia32/MultU64x32.c | MSFT + Ia32/DivU64x32.c | MSFT + Ia32/Power10U64.c | MSFT + Ia32/Log2.c | MSFT + Ia32/GetPowerOfTwo.c | MSFT + + Ia32/EfiCopyMem.S | GCC + Ia32/EfiSetMem.S | GCC + Ia32/EfiZeroMem.S | GCC + Ia32/LShiftU64.S | GCC + Ia32/RShiftU64.S | GCC + Ia32/MultU64x32.S | GCC + Ia32/DivU64x32.S | GCC + Ia32/Power10U64.S | GCC + Ia32/Log2.S | GCC + Ia32/GetPowerOfTwo.S | GCC + + Ia32/EfiCopyMemRep1.asm | INTEL + Ia32/EfiSetMemRep4.asm | INTEL + Ia32/EfiZeroMemRep4.asm | INTEL +# Ia32/EfiCopyMem.asm | INTEL +# Ia32/EfiSetMem.asm | INTEL +# Ia32/EfiZeroMem.asm | INTEL + Ia32/LShiftU64.asm | INTEL + Ia32/RShiftU64.asm | INTEL + Ia32/MultU64x32.asm | INTEL + Ia32/DivU64x32.asm | INTEL + Ia32/Power10U64.asm | INTEL + Ia32/Log2.asm | INTEL + Ia32/GetPowerOfTwo.asm | INTEL + +[sources.ipf] + EfiCopyMem.c + EfiSetMem.c + EfiZeroMem.c + Math.c + +[sources.ebc] + EfiCopyMem.c + EfiSetMem.c + EfiZeroMem.c + Math.c + +[sources.x64] + x64/EfiCopyMemRep1.asm + x64/EfiSetMemRep4.asm + x64/EfiZeroMemRep4.asm +# x64/EfiCopyMem.asm +# x64/EfiSetMem.asm +# x64/EfiZeroMem.asm + Math.c + +[includes.common] + $(EDK_SOURCE)/Foundation + $(EDK_SOURCE)/Foundation/Framework + $(EDK_SOURCE)/Foundation/Efi + $(EDK_SOURCE)/Foundation/Include + $(EDK_SOURCE)/Foundation/Efi/Include + $(EDK_SOURCE)/Foundation/Framework/Include + $(EDK_SOURCE)/Foundation/Include/IndustryStandard + $(EDK_SOURCE) + $(EDK_SOURCE)/Foundation/Core/Dxe + $(EDK_SOURCE)/Foundation/Library/Dxe/Include + $(EDK_SOURCE)/Foundation/Include/Pei + $(EDK_SOURCE)/Foundation/Library/Pei/Include + $(EDK_SOURCE)/Foundation/Framework/Ppi/CpuIo + $(EDK_SOURCE)/Foundation/Framework + +[libraries.common] + EdkFrameworkGuidLib + +[nmake.common] + diff --git a/EdkCompatibilityPkg/Foundation/Library/EfiCommonLib/Ia32/EfiCopyMemRep1.asm b/EdkCompatibilityPkg/Foundation/Library/EfiCommonLib/Ia32/EfiCopyMemRep1.asm new file mode 100644 index 0000000000..5b21ec1c2d --- /dev/null +++ b/EdkCompatibilityPkg/Foundation/Library/EfiCommonLib/Ia32/EfiCopyMemRep1.asm @@ -0,0 +1,86 @@ +;/*++ +; +;Copyright (c) 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. +; +;Module Name: +; +; EfiCopyMemRep1.asm +; +;Abstract: +; +; This is the code that uses rep movsb CopyMem service +; +;--*/ +; +;--------------------------------------------------------------------------- + .686 + .model flat,C + .code + +;--------------------------------------------------------------------------- +;#include "Tiano.h" +; +;VOID +;EfiCommonLibCopyMem ( +; IN VOID *Destination, +; IN VOID *Source, +; IN UINTN Count +; ) +;/*++ +; +;Routine Description: +; +; Copy Length bytes from Source to Destination. +; +;Arguments: +; +; Destination - Target of copy +; +; Source - Place to copy from +; +; Length - Number of bytes to copy +; +;Returns: +; +; None +; +;--*/ +EfiCommonLibCopyMem PROC + push ebp + mov ebp, esp + push esi + push edi + mov esi, dword ptr[ebp + 0Ch] ; esi <- Source + mov edi, dword ptr[ebp + 8] ; edi <- Destination + mov edx, dword ptr[ebp + 10h] ; edx <- Count + cmp esi, edi + je _CopyDone + cmp edx, 0 + je _CopyDone + lea eax, [esi + edx - 1] ; eax <- End of Source + cmp esi, edi + jae _CopyBytes + cmp eax, edi + jb _CopyBytes ; Copy backward if overlapped + mov esi, eax ; esi <- End of Source + lea edi, [edi + edx - 1] ; edi <- End of Destination + std +_CopyBytes: + mov ecx, edx + rep movsb ; Copy bytes backward + cld +_CopyDone: + pop edi + pop esi + pop ebp + ret +EfiCommonLibCopyMem ENDP + END + diff --git a/EdkCompatibilityPkg/Foundation/Library/EfiCommonLib/Ia32/EfiSetMemRep4.asm b/EdkCompatibilityPkg/Foundation/Library/EfiCommonLib/Ia32/EfiSetMemRep4.asm new file mode 100644 index 0000000000..5e64214fad --- /dev/null +++ b/EdkCompatibilityPkg/Foundation/Library/EfiCommonLib/Ia32/EfiSetMemRep4.asm @@ -0,0 +1,75 @@ +;/*++ +; +;Copyright (c) 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. +; +;Module Name: +; + ;EfiSetMemRep4.c +; +;Abstract: +; + ;This is the code that uses rep stosd SetMem service +; +;--*/ +; +;--------------------------------------------------------------------------- + .686 + .model flat,C + .code + +;--------------------------------------------------------------------------- +;#include "Tiano.h" +; +;VOID +;EfiCommonLibSetMem ( + ;IN VOID *Buffer, + ;IN UINTN Count, + ;IN UINT8 Value + ;) +;/*++ +; +;Input: VOID *Buffer - Pointer to buffer to write + ;UINTN Count - Number of bytes to write + ;UINT8 Value - Value to write +; +;Output: None. +; +;Saves: +; +;Modifies: +; +;Description: This function uses rep stosd to set memory. +; +;--*/ +EfiCommonLibSetMem PROC + push ebp + mov ebp,esp + push edi + mov ecx,dword ptr [ebp+0Ch] + test ecx, ecx + je Exit + mov al,byte ptr [ebp+10h] + mov ah, al + shrd edx, eax, 16 + shld eax, edx, 16 + mov edx, ecx + mov edi,dword ptr [ebp+8] + shr ecx, 2 + rep stosd + mov ecx, edx + and ecx, 3 + rep stosb +Exit: + pop edi + pop ebp + ret + +EfiCommonLibSetMem ENDP + END diff --git a/EdkCompatibilityPkg/Foundation/Library/EfiCommonLib/Ia32/EfiZeroMemRep4.asm b/EdkCompatibilityPkg/Foundation/Library/EfiCommonLib/Ia32/EfiZeroMemRep4.asm new file mode 100644 index 0000000000..4817c10354 --- /dev/null +++ b/EdkCompatibilityPkg/Foundation/Library/EfiCommonLib/Ia32/EfiZeroMemRep4.asm @@ -0,0 +1,70 @@ +;/*++ +; +;Copyright (c) 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. +; +;Module Name: +; + ;EfiZeroMemRep4.asm +; +;Abstract: +; + ;This is the code that uses rep stosd ZeroMem service +; +;--*/ +; +;--------------------------------------------------------------------------- + .686 + .model flat,C + .code + +;--------------------------------------------------------------------------- +;#include "Tiano.h" +; +;VOID +;EfiCommonLibZeroMem ( + ;IN VOID *Buffer, + ;IN UINTN Count + ;) +;/*++ +; +;Input: VOID *Buffer - Pointer to buffer to clear + ;UINTN Count - Number of bytes to clear +; +;Output: None. +; +;Saves: +; +;Modifies: +; +;Description: This function uses rep stosd to zero memory. +; +;--*/ +EfiCommonLibZeroMem PROC + push ebp + mov ebp,esp + push edi + mov ecx,dword ptr [ebp+0Ch] + test ecx, ecx + je Exit + xor eax, eax + mov edi,dword ptr [ebp+8] + mov edx, ecx + shr ecx, 2 + and edx, 3 + rep stosd + mov ecx, edx + rep stosb +Exit: + pop edi + pop ebp + ret + +EfiCommonLibZeroMem ENDP + END -- 2.39.2