From c7f33ca42470dc87bc41a8583f427883123d67a1 Mon Sep 17 00:00:00 2001 From: qwang12 Date: Thu, 24 Jan 2008 07:10:05 +0000 Subject: 1) Sync EdkCompatibilityPkg with EDK 1.04. The changes includes: 1.1) Bug fixes. (For details, please check Documents & files: Snapshot/Release Notes at https://edk.tianocore.org/servlets/ProjectDocumentList?folderID=43&expandFolder=43&folderID=6) 1.2) Add new UEFI protocol definitions for AbsolutePointer, FormBrowser2, HiiConfigAccess, HiiConfigRouting, HiiDatabase, HiiFont, HiiImage, HiiString, SimpleTextInputEx, DPC protocol. 1.3) Add Smbios 2.5, 2.6 supports. Incompatible changes hilighted: 1) EFI_MANAGED_NETWORK_PROTOCOL_GUID changed. 2) EFI_IP4_IPCONFIG_DATA changed. 2) Add in EdkCompatibilityPkg/EdkCompatibilityPkg.dsc to build all libraries in this package. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4623 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Library/CompilerStub/CompilerStubLib.inf | 14 +++-- .../Library/CompilerStub/Ia32/memcpyRep1.asm | 61 +++++++++++++++++++ .../Library/CompilerStub/Ia32/memcpyRep4.asm | 70 ++++++++++++++++++++++ .../Library/CompilerStub/Ia32/memsetRep1.asm | 48 +++++++++++++++ .../Library/CompilerStub/Ia32/memsetRep4.asm | 56 +++++++++++++++++ .../Library/CompilerStub/x64/memcpyRep1.asm | 59 ++++++++++++++++++ .../Library/CompilerStub/x64/memcpyRep4.asm | 65 ++++++++++++++++++++ .../Library/CompilerStub/x64/memcpyRep8.asm | 66 ++++++++++++++++++++ .../Library/CompilerStub/x64/memsetRep1.asm | 48 +++++++++++++++ .../Library/CompilerStub/x64/memsetRep4.asm | 55 +++++++++++++++++ .../Library/CompilerStub/x64/memsetRep8.asm | 60 +++++++++++++++++++ 11 files changed, 597 insertions(+), 5 deletions(-) create mode 100644 EdkCompatibilityPkg/Foundation/Library/CompilerStub/Ia32/memcpyRep1.asm create mode 100644 EdkCompatibilityPkg/Foundation/Library/CompilerStub/Ia32/memcpyRep4.asm create mode 100644 EdkCompatibilityPkg/Foundation/Library/CompilerStub/Ia32/memsetRep1.asm create mode 100644 EdkCompatibilityPkg/Foundation/Library/CompilerStub/Ia32/memsetRep4.asm create mode 100644 EdkCompatibilityPkg/Foundation/Library/CompilerStub/x64/memcpyRep1.asm create mode 100644 EdkCompatibilityPkg/Foundation/Library/CompilerStub/x64/memcpyRep4.asm create mode 100644 EdkCompatibilityPkg/Foundation/Library/CompilerStub/x64/memcpyRep8.asm create mode 100644 EdkCompatibilityPkg/Foundation/Library/CompilerStub/x64/memsetRep1.asm create mode 100644 EdkCompatibilityPkg/Foundation/Library/CompilerStub/x64/memsetRep4.asm create mode 100644 EdkCompatibilityPkg/Foundation/Library/CompilerStub/x64/memsetRep8.asm (limited to 'EdkCompatibilityPkg/Foundation/Library/CompilerStub') diff --git a/EdkCompatibilityPkg/Foundation/Library/CompilerStub/CompilerStubLib.inf b/EdkCompatibilityPkg/Foundation/Library/CompilerStub/CompilerStubLib.inf index b80e6faca3..aeb80b8e7e 100644 --- a/EdkCompatibilityPkg/Foundation/Library/CompilerStub/CompilerStubLib.inf +++ b/EdkCompatibilityPkg/Foundation/Library/CompilerStub/CompilerStubLib.inf @@ -22,16 +22,20 @@ [defines] BASE_NAME = CompilerStub COMPONENT_TYPE = LIBRARY - + [sources.common] [sources.ia32] - Ia32\memcpy.asm - Ia32\memset.asm + Ia32\memcpyRep1.asm + Ia32\memsetRep4.asm +# Ia32\memcpy.asm +# Ia32\memset.asm [sources.x64] - x64\memcpy.asm - x64\memset.asm + x64\memcpyRep1.asm + x64\memsetRep4.asm +# x64\memcpy.asm +# x64\memset.asm [sources.Ipf] memcpy.c diff --git a/EdkCompatibilityPkg/Foundation/Library/CompilerStub/Ia32/memcpyRep1.asm b/EdkCompatibilityPkg/Foundation/Library/CompilerStub/Ia32/memcpyRep1.asm new file mode 100644 index 0000000000..aeebcfd09b --- /dev/null +++ b/EdkCompatibilityPkg/Foundation/Library/CompilerStub/Ia32/memcpyRep1.asm @@ -0,0 +1,61 @@ +;------------------------------------------------------------------------------ +; +; 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: +; +; CopyMem.asm +; +; Abstract: +; +; memcpy function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .686 + .model flat,C + .code + +;------------------------------------------------------------------------------ +; VOID * +; memcpy ( +; IN VOID *Destination, +; IN VOID *Source, +; IN UINTN Count +; ); +;------------------------------------------------------------------------------ +memcpy PROC USES esi edi + mov esi, [esp + 16] ; esi <- Source + mov edi, [esp + 12] ; edi <- Destination + mov edx, [esp + 20] ; 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 @F + cmp eax, edi + jb @F ; Copy backward if overlapped + mov esi, eax ; esi <- End of Source + lea edi, [edi + edx - 1] ; edi <- End of Destination + std +@@: + mov ecx, edx + rep movsb ; Copy bytes backward + cld +@CopyDone: + mov eax, [esp + 12] + ret +memcpy ENDP + + END diff --git a/EdkCompatibilityPkg/Foundation/Library/CompilerStub/Ia32/memcpyRep4.asm b/EdkCompatibilityPkg/Foundation/Library/CompilerStub/Ia32/memcpyRep4.asm new file mode 100644 index 0000000000..d4cef09d7c --- /dev/null +++ b/EdkCompatibilityPkg/Foundation/Library/CompilerStub/Ia32/memcpyRep4.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: +; +; CopyMem.asm +; +; Abstract: +; +; memcpy function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .686 + .model flat,C + .mmx + .code + +;------------------------------------------------------------------------------ +; VOID * +; memcpy ( +; IN VOID *Destination, +; IN VOID *Source, +; IN UINTN Count +; ); +;------------------------------------------------------------------------------ +memcpy PROC USES esi edi + mov esi, [esp + 16] ; esi <- Source + mov edi, [esp + 12] ; edi <- Destination + mov edx, [esp + 20] ; 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 @F + cmp eax, edi + jae @CopyBackward ; Copy backward if overlapped +@@: + mov ecx, edx + and edx, 3 + shr ecx, 2 + rep movsd ; Copy as many Dwords as possible + jmp @CopyBytes +@CopyBackward: + 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: + mov eax, [esp + 12] + ret + +memcpy ENDP + + END diff --git a/EdkCompatibilityPkg/Foundation/Library/CompilerStub/Ia32/memsetRep1.asm b/EdkCompatibilityPkg/Foundation/Library/CompilerStub/Ia32/memsetRep1.asm new file mode 100644 index 0000000000..905c1f765e --- /dev/null +++ b/EdkCompatibilityPkg/Foundation/Library/CompilerStub/Ia32/memsetRep1.asm @@ -0,0 +1,48 @@ +;------------------------------------------------------------------------------ +; +; 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: +; +; SetMem.asm +; +; Abstract: +; +; memset function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .686 + .model flat,C + .code + +;------------------------------------------------------------------------------ +; VOID * +; memset ( +; OUT VOID *Buffer, +; IN UINT8 Value, +; IN UINTN Count +; ) +;------------------------------------------------------------------------------ +memset PROC USES edi + mov ecx, [esp + 16] + test ecx, ecx + je @F + mov al, [esp + 12] + mov edi, [esp + 8] + rep stosb +@@: + mov eax, [esp + 8] + ret +memset ENDP + + END diff --git a/EdkCompatibilityPkg/Foundation/Library/CompilerStub/Ia32/memsetRep4.asm b/EdkCompatibilityPkg/Foundation/Library/CompilerStub/Ia32/memsetRep4.asm new file mode 100644 index 0000000000..fadee231cb --- /dev/null +++ b/EdkCompatibilityPkg/Foundation/Library/CompilerStub/Ia32/memsetRep4.asm @@ -0,0 +1,56 @@ +;------------------------------------------------------------------------------ +; +; 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: +; +; SetMem.asm +; +; Abstract: +; +; memset function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .686 + .model flat,C + .code + +;------------------------------------------------------------------------------ +; VOID * +; memset ( +; OUT VOID *Buffer, +; IN UINT8 Value, +; IN UINTN Count +; ) +;------------------------------------------------------------------------------ +memset PROC USES edi + mov ecx, [esp + 16] + test ecx, ecx + je @F + mov al, [esp + 12] + mov ah, al + shrd edx, eax, 16 + shld eax, edx, 16 + mov edx, ecx + mov edi, [esp + 8] + shr ecx, 2 + rep stosd + mov ecx, edx + and ecx, 3 + rep stosb +@@: + mov eax, [esp + 8] + ret +memset ENDP + + END diff --git a/EdkCompatibilityPkg/Foundation/Library/CompilerStub/x64/memcpyRep1.asm b/EdkCompatibilityPkg/Foundation/Library/CompilerStub/x64/memcpyRep1.asm new file mode 100644 index 0000000000..72b8de3c26 --- /dev/null +++ b/EdkCompatibilityPkg/Foundation/Library/CompilerStub/x64/memcpyRep1.asm @@ -0,0 +1,59 @@ +;------------------------------------------------------------------------------ +; +; 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: +; +; memcpyRep1.asm +; +; Abstract: +; +; CopyMem function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; memcpy ( +; OUT VOID *Destination, +; IN VOID *Source, +; IN UINTN Count +; ); +;------------------------------------------------------------------------------ +memcpy PROC USES rsi rdi + mov rax, rcx + cmp rdx, rcx ; if Source == Destination, do nothing + je @CopyMemDone + cmp r8, 0 ; if Count == 0, do nothing + je @CopyMemDone + mov rsi, rdx ; rsi <- Source + mov rdi, rcx ; rdi <- Destination + lea r9, [rsi + r8 - 1] ; r9 <- End of Source + cmp rsi, rdi + jae @F + cmp r9, rdi + jb @F ; Copy backward if overlapped + mov rsi, r9 ; rsi <- End of Source + lea rdi, [rdi + r8 - 1] ; esi <- End of Destination + std ; set direction flag +@@: + mov rcx, r8 + rep movsb ; Copy bytes backward + cld +@CopyMemDone: + ret +memcpy ENDP + + END + diff --git a/EdkCompatibilityPkg/Foundation/Library/CompilerStub/x64/memcpyRep4.asm b/EdkCompatibilityPkg/Foundation/Library/CompilerStub/x64/memcpyRep4.asm new file mode 100644 index 0000000000..2cca1c3380 --- /dev/null +++ b/EdkCompatibilityPkg/Foundation/Library/CompilerStub/x64/memcpyRep4.asm @@ -0,0 +1,65 @@ +;------------------------------------------------------------------------------ +; +; 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: +; +; memcpyRep8.asm +; +; Abstract: +; +; CopyMem function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; memcpy ( +; OUT VOID *Destination, +; IN VOID *Source, +; IN UINTN Count +; ); +;------------------------------------------------------------------------------ +memcpy PROC USES rsi rdi + mov rax, rcx + cmp rdx, rcx ; if Source == Destination, do nothing + je @CopyMemDone + cmp r8, 0 ; if Count == 0, do nothing + je @CopyMemDone + mov rsi, rdx ; rsi <- Source + mov rdi, rcx ; rdi <- Destination + lea r9, [rsi + r8 - 1] ; r9 <- End of Source + cmp rsi, rdi + jae @F + cmp r9, rdi + jae @CopyBackward ; Copy backward if overlapped +@@: + mov rcx, r8 + and r8, 3 + shr rcx, 2 + rep movsd ; Copy as many Dwords as possible + jmp @CopyBytes +@CopyBackward: + mov rsi, r9 ; rsi <- End of Source + lea rdi, [rdi + r8 - 1] ; esi <- End of Destination + std ; set direction flag +@CopyBytes: + mov rcx, r8 + rep movsb ; Copy bytes backward + cld +@CopyMemDone: + ret +memcpy ENDP + + END diff --git a/EdkCompatibilityPkg/Foundation/Library/CompilerStub/x64/memcpyRep8.asm b/EdkCompatibilityPkg/Foundation/Library/CompilerStub/x64/memcpyRep8.asm new file mode 100644 index 0000000000..27b3ca5364 --- /dev/null +++ b/EdkCompatibilityPkg/Foundation/Library/CompilerStub/x64/memcpyRep8.asm @@ -0,0 +1,66 @@ +;------------------------------------------------------------------------------ +; +; 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: +; +; memcpyRep8.asm +; +; Abstract: +; +; CopyMem function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; memcpy ( +; OUT VOID *Destination, +; IN VOID *Source, +; IN UINTN Count +; ); +;------------------------------------------------------------------------------ +memcpy PROC USES rsi rdi + mov rax, rcx + cmp rdx, rcx ; if Source == Destination, do nothing + je @CopyMemDone + cmp r8, 0 ; if Count == 0, do nothing + je @CopyMemDone + mov rsi, rdx ; rsi <- Source + mov rdi, rcx ; rdi <- Destination + lea r9, [rsi + r8 - 1] ; r9 <- End of Source + cmp rsi, rdi + jae @F + cmp r9, rdi + jae @CopyBackward ; Copy backward if overlapped +@@: + mov rcx, r8 + and r8, 7 + shr rcx, 3 + rep movsq ; Copy as many Qwords as possible + jmp @CopyBytes +@CopyBackward: + mov rsi, r9 ; rsi <- End of Source + lea rdi, [rdi + r8 - 1] ; esi <- End of Destination + std ; set direction flag +@CopyBytes: + mov rcx, r8 + rep movsb ; Copy bytes backward + cld +@CopyMemDone: + ret +memcpy ENDP + + END + diff --git a/EdkCompatibilityPkg/Foundation/Library/CompilerStub/x64/memsetRep1.asm b/EdkCompatibilityPkg/Foundation/Library/CompilerStub/x64/memsetRep1.asm new file mode 100644 index 0000000000..9a4d67330c --- /dev/null +++ b/EdkCompatibilityPkg/Foundation/Library/CompilerStub/x64/memsetRep1.asm @@ -0,0 +1,48 @@ +;------------------------------------------------------------------------------ +; +; 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: +; +; memsetRep1.asm +; +; Abstract: +; +; SetMem function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID * +; memset ( +; OUT VOID *Buffer, +; IN UINTN Size, +; IN UINT8 Value +; ); +;------------------------------------------------------------------------------ +memset PROC USES rdi + cmp rdx, 0 ; if Size == 0, do nothing + mov r9, rcx + je @SetDone + mov rax, r8 + mov rdi, rcx + mov rcx, rdx + rep stosb +@SetDone: + mov rax, r9 + ret +memset ENDP + + END + diff --git a/EdkCompatibilityPkg/Foundation/Library/CompilerStub/x64/memsetRep4.asm b/EdkCompatibilityPkg/Foundation/Library/CompilerStub/x64/memsetRep4.asm new file mode 100644 index 0000000000..6ef0036578 --- /dev/null +++ b/EdkCompatibilityPkg/Foundation/Library/CompilerStub/x64/memsetRep4.asm @@ -0,0 +1,55 @@ +;------------------------------------------------------------------------------ +; +; 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: +; +; SetMem.asm +; +; Abstract: +; +; memset function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID * +; memset ( +; OUT VOID *Buffer, +; IN UINT8 Value, +; IN UINTN Count +; ) +;------------------------------------------------------------------------------ +memset PROC USES rdi + cmp r8, 0 ; if Size == 0, do nothing + mov r9, rcx + je @SetDone + mov al, dl + mov ah, al + shrd edx, eax, 16 + shld eax, edx, 16 + mov rdi, rcx + mov rcx, r8 + shr rcx, 2 + rep stosd + mov rcx, r8 + and rcx, 3 + rep stosb +@SetDone: + mov rax, r9 + ret +memset ENDP + + END + diff --git a/EdkCompatibilityPkg/Foundation/Library/CompilerStub/x64/memsetRep8.asm b/EdkCompatibilityPkg/Foundation/Library/CompilerStub/x64/memsetRep8.asm new file mode 100644 index 0000000000..16cb026df1 --- /dev/null +++ b/EdkCompatibilityPkg/Foundation/Library/CompilerStub/x64/memsetRep8.asm @@ -0,0 +1,60 @@ +;------------------------------------------------------------------------------ +; +; 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: +; +; memsetRep8.asm +; +; Abstract: +; +; SetMem function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; memset ( +; OUT VOID *Buffer, +; IN UINT8 Value, +; IN UINTN Length +; ); +;------------------------------------------------------------------------------ +memset PROC USES rdi rbx + cmp r8, 0 ; if Size == 0, do nothing + mov r9, rcx + je @SetDone + mov rax, rdx + mov bl, al + mov bh, bl + mov ax, bx + shl rax, 10h + mov ax, bx + mov ebx, eax + shl rax, 20h + mov eax, ebx + mov rdi, rcx + mov rcx, r8 + shr rcx, 3 + rep stosq + mov rcx, rdx + and rcx, 7 + rep stosb +@SetDone: + mov rax, r9 + ret +memset ENDP + + END + -- cgit v1.2.3