Fix capitalization issues
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@208 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@ -661,7 +661,7 @@ typedef struct {
|
|||||||
#include <Ppi/SecPlatformInformation.h>
|
#include <Ppi/SecPlatformInformation.h>
|
||||||
#include <Ppi/SectionExtraction.h>
|
#include <Ppi/SectionExtraction.h>
|
||||||
#include <Ppi/Security.h>
|
#include <Ppi/Security.h>
|
||||||
#include <Ppi/SmBus.h>
|
#include <Ppi/Smbus.h>
|
||||||
#include <Ppi/Stall.h>
|
#include <Ppi/Stall.h>
|
||||||
#include <Ppi/StatusCode.h>
|
#include <Ppi/StatusCode.h>
|
||||||
|
|
||||||
|
46
MdePkg/Library/BaseMemoryLibMmx/Ia32/CompareMem.asm
Normal file
46
MdePkg/Library/BaseMemoryLibMmx/Ia32/CompareMem.asm
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
;------------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; Copyright (c) 2006, 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:
|
||||||
|
;
|
||||||
|
; CompareMem.Asm
|
||||||
|
;
|
||||||
|
; Abstract:
|
||||||
|
;
|
||||||
|
; CompareMem function
|
||||||
|
;
|
||||||
|
; Notes:
|
||||||
|
;
|
||||||
|
; The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
;
|
||||||
|
; BaseMemoryLibRepStr
|
||||||
|
; BaseMemoryLibMmx
|
||||||
|
; BaseMemoryLibSse2
|
||||||
|
;
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686
|
||||||
|
.model flat,C
|
||||||
|
.code
|
||||||
|
|
||||||
|
InternalMemCompareMem PROC USES esi edi
|
||||||
|
mov esi, [esp + 12]
|
||||||
|
mov edi, [esp + 16]
|
||||||
|
mov ecx, [esp + 20]
|
||||||
|
repe cmpsb
|
||||||
|
movzx eax, byte ptr [esi - 1]
|
||||||
|
movzx edx, byte ptr [edi - 1]
|
||||||
|
sub eax, edx
|
||||||
|
sub eax, edx
|
||||||
|
ret
|
||||||
|
InternalMemCompareMem ENDP
|
||||||
|
|
||||||
|
END
|
50
MdePkg/Library/BaseMemoryLibMmx/Ia32/CompareMem.s
Normal file
50
MdePkg/Library/BaseMemoryLibMmx/Ia32/CompareMem.s
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
#------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006, 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:
|
||||||
|
#
|
||||||
|
# CompareMem.Asm
|
||||||
|
#
|
||||||
|
# Abstract:
|
||||||
|
#
|
||||||
|
# CompareMem function
|
||||||
|
#
|
||||||
|
# Notes:
|
||||||
|
#
|
||||||
|
# The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
#
|
||||||
|
# BaseMemoryLibRepStr
|
||||||
|
# BaseMemoryLibMmx
|
||||||
|
# BaseMemoryLibSse2
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686:
|
||||||
|
#.MODEL flat,C
|
||||||
|
.code:
|
||||||
|
|
||||||
|
.global _InternalMemCompareMem
|
||||||
|
_InternalMemCompareMem:
|
||||||
|
push %esi
|
||||||
|
push %edi
|
||||||
|
movl 12(%esp), %esi
|
||||||
|
movl 16(%esp), %edi
|
||||||
|
movl 20(%esp), %ecx
|
||||||
|
repe cmpsb
|
||||||
|
movzbl -1(%esi), %eax
|
||||||
|
movzbl -1(%edi), %edx
|
||||||
|
subl %edx, %eax
|
||||||
|
subl %edx, %eax
|
||||||
|
pop %edi
|
||||||
|
pop %esi
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
86
MdePkg/Library/BaseMemoryLibMmx/Ia32/CopyMem.asm
Normal file
86
MdePkg/Library/BaseMemoryLibMmx/Ia32/CopyMem.asm
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
;------------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; Copyright (c) 2006, 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:
|
||||||
|
;
|
||||||
|
; CopyMem function
|
||||||
|
;
|
||||||
|
; Notes:
|
||||||
|
;
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686
|
||||||
|
.model flat,C
|
||||||
|
.xmm
|
||||||
|
.code
|
||||||
|
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
; VOID *
|
||||||
|
; _mem_CopyMem (
|
||||||
|
; IN VOID *Destination,
|
||||||
|
; IN VOID *Source,
|
||||||
|
; IN UINTN Count
|
||||||
|
; )
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
InternalMemCopyMem PROC USES esi edi
|
||||||
|
mov esi, [esp + 16] ; esi <- Source
|
||||||
|
mov edi, [esp + 12] ; edi <- Destination
|
||||||
|
mov edx, [esp + 20] ; edx <- Count
|
||||||
|
lea eax, [edi + edx - 1] ; eax <- End of Destination
|
||||||
|
cmp esi, edi
|
||||||
|
jae @F
|
||||||
|
cmp eax, esi ; Overlapped?
|
||||||
|
jae @CopyBackward ; Copy backward if overlapped
|
||||||
|
@@:
|
||||||
|
xor ecx, ecx
|
||||||
|
sub ecx, esi
|
||||||
|
and ecx, 7 ; ecx + esi aligns on 8-byte boundary
|
||||||
|
jz @F
|
||||||
|
cmp ecx, edx
|
||||||
|
cmova ecx, edx
|
||||||
|
sub edx, ecx ; edx <- remaining bytes to copy
|
||||||
|
rep movsb
|
||||||
|
@@:
|
||||||
|
mov ecx, edx
|
||||||
|
and edx, 7
|
||||||
|
shr ecx, 3 ; ecx <- # of Qwords to copy
|
||||||
|
jz @CopyBytes
|
||||||
|
push eax
|
||||||
|
push eax
|
||||||
|
movq [esp], mm0 ; save mm0
|
||||||
|
@@:
|
||||||
|
movq mm0, [esi]
|
||||||
|
movntq [edi], mm0
|
||||||
|
add esi, 8
|
||||||
|
add edi, 8
|
||||||
|
loop @B
|
||||||
|
mfence
|
||||||
|
movq mm0, [esp] ; restore mm0
|
||||||
|
pop ecx ; stack cleanup
|
||||||
|
pop ecx ; stack cleanup
|
||||||
|
jmp @CopyBytes
|
||||||
|
@CopyBackward:
|
||||||
|
mov edi, eax ; edi <- Last byte in Destination
|
||||||
|
lea esi, [esi + edx - 1] ; esi <- Last byte in Source
|
||||||
|
std
|
||||||
|
@CopyBytes:
|
||||||
|
mov ecx, edx
|
||||||
|
rep movsb
|
||||||
|
cld
|
||||||
|
mov eax, [esp + 12]
|
||||||
|
ret
|
||||||
|
InternalMemCopyMem ENDP
|
||||||
|
|
||||||
|
END
|
90
MdePkg/Library/BaseMemoryLibMmx/Ia32/CopyMem.s
Normal file
90
MdePkg/Library/BaseMemoryLibMmx/Ia32/CopyMem.s
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
#------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006, 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:
|
||||||
|
#
|
||||||
|
# CopyMem function
|
||||||
|
#
|
||||||
|
# Notes:
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686:
|
||||||
|
#.MODEL flat,C
|
||||||
|
.xmm:
|
||||||
|
.code:
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# VOID *
|
||||||
|
# _mem_CopyMem (
|
||||||
|
# IN VOID *Destination,
|
||||||
|
# IN VOID *Source,
|
||||||
|
# IN UINTN Count
|
||||||
|
# )
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
.global _InternalMemCopyMem
|
||||||
|
_InternalMemCopyMem:
|
||||||
|
push %esi
|
||||||
|
push %edi
|
||||||
|
movl 16(%esp), %esi # esi <- Source
|
||||||
|
movl 12(%esp), %edi # edi <- Destination
|
||||||
|
movl 20(%esp), %edx # edx <- Count
|
||||||
|
leal -1(%edi,%edx,), %eax # eax <- End of Destination
|
||||||
|
cmpl %edi, %esi
|
||||||
|
jae L0
|
||||||
|
cmpl %esi, %eax # Overlapped?
|
||||||
|
jae @CopyBackward # Copy backward if overlapped
|
||||||
|
L0:
|
||||||
|
xorl %ecx, %ecx
|
||||||
|
subl %esi, %ecx
|
||||||
|
andl $7, %ecx # ecx + esi aligns on 8-byte boundary
|
||||||
|
jz L1
|
||||||
|
cmpl %edx, %ecx
|
||||||
|
cmova %edx, %ecx
|
||||||
|
subl %ecx, %edx # edx <- remaining bytes to copy
|
||||||
|
rep
|
||||||
|
movsb
|
||||||
|
L1:
|
||||||
|
movl %edx, %ecx
|
||||||
|
andl $7, %edx
|
||||||
|
shrl $3, %ecx # ecx <- # of Qwords to copy
|
||||||
|
jz @CopyBytes
|
||||||
|
pushl %eax
|
||||||
|
pushl %eax
|
||||||
|
movq %mm0, (%esp) # save mm0
|
||||||
|
L2:
|
||||||
|
movq (%esi), %mm0
|
||||||
|
movntq %mm0, (%edi)
|
||||||
|
addl $8, %esi
|
||||||
|
addl $8, %edi
|
||||||
|
loop L2
|
||||||
|
mfence
|
||||||
|
movq (%esp), %mm0 # restore mm0
|
||||||
|
popl %ecx # stack cleanup
|
||||||
|
popl %ecx # stack cleanup
|
||||||
|
jmp @CopyBytes
|
||||||
|
@CopyBackward:
|
||||||
|
movl %eax, %edi # edi <- Last byte in Destination
|
||||||
|
leal -1(%esi,%edx,), %esi # esi <- Last byte in Source
|
||||||
|
std
|
||||||
|
@CopyBytes:
|
||||||
|
movl %edx, %ecx
|
||||||
|
rep
|
||||||
|
movsb
|
||||||
|
cld
|
||||||
|
movl 12(%esp), %eax
|
||||||
|
push %esi
|
||||||
|
push %edi
|
||||||
|
ret
|
44
MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem16.asm
Normal file
44
MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem16.asm
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
;------------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; Copyright (c) 2006, 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:
|
||||||
|
;
|
||||||
|
; ScanMem16.Asm
|
||||||
|
;
|
||||||
|
; Abstract:
|
||||||
|
;
|
||||||
|
; ScanMem16 function
|
||||||
|
;
|
||||||
|
; Notes:
|
||||||
|
;
|
||||||
|
; The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
;
|
||||||
|
; BaseMemoryLibRepStr
|
||||||
|
; BaseMemoryLibMmx
|
||||||
|
; BaseMemoryLibSse2
|
||||||
|
;
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686
|
||||||
|
.model flat,C
|
||||||
|
.code
|
||||||
|
|
||||||
|
InternalMemScanMem16 PROC USES edi
|
||||||
|
mov ecx, [esp + 12]
|
||||||
|
mov edi, [esp + 8]
|
||||||
|
mov eax, [esp + 16]
|
||||||
|
repne scasw
|
||||||
|
lea eax, [edi - 2]
|
||||||
|
cmovnz eax, ecx
|
||||||
|
ret
|
||||||
|
InternalMemScanMem16 ENDP
|
||||||
|
|
||||||
|
END
|
46
MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem16.s
Normal file
46
MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem16.s
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006, 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:
|
||||||
|
#
|
||||||
|
# ScanMem16.Asm
|
||||||
|
#
|
||||||
|
# Abstract:
|
||||||
|
#
|
||||||
|
# ScanMem16 function
|
||||||
|
#
|
||||||
|
# Notes:
|
||||||
|
#
|
||||||
|
# The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
#
|
||||||
|
# BaseMemoryLibRepStr
|
||||||
|
# BaseMemoryLibMmx
|
||||||
|
# BaseMemoryLibSse2
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686:
|
||||||
|
#.MODEL flat,C
|
||||||
|
.code:
|
||||||
|
|
||||||
|
.global _InternalMemScanMem16
|
||||||
|
_InternalMemScanMem16:
|
||||||
|
push %edi
|
||||||
|
movl 12(%esp), %ecx
|
||||||
|
movl 8(%esp), %edi
|
||||||
|
movl 16(%esp), %eax
|
||||||
|
repne scasw
|
||||||
|
leal -2(%edi), %eax
|
||||||
|
cmovnz %ecx, %eax
|
||||||
|
pop %edi
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
44
MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem32.asm
Normal file
44
MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem32.asm
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
;------------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; Copyright (c) 2006, 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:
|
||||||
|
;
|
||||||
|
; ScanMem32.Asm
|
||||||
|
;
|
||||||
|
; Abstract:
|
||||||
|
;
|
||||||
|
; ScanMem32 function
|
||||||
|
;
|
||||||
|
; Notes:
|
||||||
|
;
|
||||||
|
; The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
;
|
||||||
|
; BaseMemoryLibRepStr
|
||||||
|
; BaseMemoryLibMmx
|
||||||
|
; BaseMemoryLibSse2
|
||||||
|
;
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686
|
||||||
|
.model flat,C
|
||||||
|
.code
|
||||||
|
|
||||||
|
InternalMemScanMem32 PROC USES edi
|
||||||
|
mov ecx, [esp + 12]
|
||||||
|
mov edi, [esp + 8]
|
||||||
|
mov eax, [esp + 16]
|
||||||
|
repne scasd
|
||||||
|
lea eax, [edi - 4]
|
||||||
|
cmovnz eax, ecx
|
||||||
|
ret
|
||||||
|
InternalMemScanMem32 ENDP
|
||||||
|
|
||||||
|
END
|
44
MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem32.s
Normal file
44
MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem32.s
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006, 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:
|
||||||
|
#
|
||||||
|
# ScanMem32.Asm
|
||||||
|
#
|
||||||
|
# Abstract:
|
||||||
|
#
|
||||||
|
# ScanMem32 function
|
||||||
|
#
|
||||||
|
# Notes:
|
||||||
|
#
|
||||||
|
# The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
#
|
||||||
|
# BaseMemoryLibRepStr
|
||||||
|
# BaseMemoryLibMmx
|
||||||
|
# BaseMemoryLibSse2
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686:
|
||||||
|
#.MODEL flat,C
|
||||||
|
.code:
|
||||||
|
|
||||||
|
.global _InternalMemScanMem32
|
||||||
|
_InternalMemScanMem32:
|
||||||
|
push %edi
|
||||||
|
movl 12(%esp), %ecx
|
||||||
|
movl 8(%esp), %edi
|
||||||
|
movl 16(%esp), %eax
|
||||||
|
repne scasl
|
||||||
|
leal -4(%edi), %eax
|
||||||
|
cmovnz %ecx, %eax
|
||||||
|
pop %edi
|
||||||
|
ret
|
53
MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem64.asm
Normal file
53
MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem64.asm
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
;------------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; Copyright (c) 2006, 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:
|
||||||
|
;
|
||||||
|
; ScanMem64.Asm
|
||||||
|
;
|
||||||
|
; Abstract:
|
||||||
|
;
|
||||||
|
; ScanMem64 function
|
||||||
|
;
|
||||||
|
; Notes:
|
||||||
|
;
|
||||||
|
; The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
;
|
||||||
|
; BaseMemoryLibRepStr
|
||||||
|
; BaseMemoryLibMmx
|
||||||
|
; BaseMemoryLibSse2
|
||||||
|
;
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686
|
||||||
|
.model flat,C
|
||||||
|
.code
|
||||||
|
|
||||||
|
InternalMemScanMem64 PROC USES edi
|
||||||
|
mov ecx, [esp + 12]
|
||||||
|
mov eax, [esp + 16]
|
||||||
|
mov edx, [esp + 20]
|
||||||
|
mov edi, [esp + 8]
|
||||||
|
@@:
|
||||||
|
cmp eax, [edi]
|
||||||
|
lea edi, [edi + 8]
|
||||||
|
loopne @B
|
||||||
|
jne @F
|
||||||
|
cmp edx, [edi - 4]
|
||||||
|
jecxz @F
|
||||||
|
jne @B
|
||||||
|
@@:
|
||||||
|
lea eax, [edi - 8]
|
||||||
|
cmovne eax, ecx
|
||||||
|
ret
|
||||||
|
InternalMemScanMem64 ENDP
|
||||||
|
|
||||||
|
END
|
53
MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem64.s
Normal file
53
MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem64.s
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
#------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006, 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:
|
||||||
|
#
|
||||||
|
# ScanMem64.Asm
|
||||||
|
#
|
||||||
|
# Abstract:
|
||||||
|
#
|
||||||
|
# ScanMem64 function
|
||||||
|
#
|
||||||
|
# Notes:
|
||||||
|
#
|
||||||
|
# The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
#
|
||||||
|
# BaseMemoryLibRepStr
|
||||||
|
# BaseMemoryLibMmx
|
||||||
|
# BaseMemoryLibSse2
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686:
|
||||||
|
#.MODEL flat,C
|
||||||
|
.code:
|
||||||
|
|
||||||
|
.global _InternalMemScanMem64
|
||||||
|
_InternalMemScanMem64:
|
||||||
|
push %edi
|
||||||
|
movl 12(%esp), %ecx
|
||||||
|
movl 16(%esp), %eax
|
||||||
|
movl 20(%esp), %edx
|
||||||
|
movl 8(%esp), %edi
|
||||||
|
L0:
|
||||||
|
cmpl (%edi), %eax
|
||||||
|
leal 8(%edi), %edi
|
||||||
|
loopne L0
|
||||||
|
jne L1
|
||||||
|
cmpl -4(%edi), %edx
|
||||||
|
jecxz L1
|
||||||
|
jne L0
|
||||||
|
L1:
|
||||||
|
leal -8(%edi), %eax
|
||||||
|
cmovne %ecx, %eax
|
||||||
|
pop %edi
|
||||||
|
ret
|
44
MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem8.asm
Normal file
44
MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem8.asm
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
;------------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; Copyright (c) 2006, 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:
|
||||||
|
;
|
||||||
|
; ScanMem8.Asm
|
||||||
|
;
|
||||||
|
; Abstract:
|
||||||
|
;
|
||||||
|
; ScanMem8 function
|
||||||
|
;
|
||||||
|
; Notes:
|
||||||
|
;
|
||||||
|
; The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
;
|
||||||
|
; BaseMemoryLibRepStr
|
||||||
|
; BaseMemoryLibMmx
|
||||||
|
; BaseMemoryLibSse2
|
||||||
|
;
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686
|
||||||
|
.model flat,C
|
||||||
|
.code
|
||||||
|
|
||||||
|
InternalMemScanMem8 PROC USES edi
|
||||||
|
mov ecx, [esp + 12]
|
||||||
|
mov edi, [esp + 8]
|
||||||
|
mov al, [esp + 16]
|
||||||
|
repne scasb
|
||||||
|
lea eax, [edi - 1]
|
||||||
|
cmovnz eax, ecx
|
||||||
|
ret
|
||||||
|
InternalMemScanMem8 ENDP
|
||||||
|
|
||||||
|
END
|
44
MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem8.s
Normal file
44
MdePkg/Library/BaseMemoryLibMmx/Ia32/ScanMem8.s
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006, 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:
|
||||||
|
#
|
||||||
|
# ScanMem8.Asm
|
||||||
|
#
|
||||||
|
# Abstract:
|
||||||
|
#
|
||||||
|
# ScanMem8 function
|
||||||
|
#
|
||||||
|
# Notes:
|
||||||
|
#
|
||||||
|
# The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
#
|
||||||
|
# BaseMemoryLibRepStr
|
||||||
|
# BaseMemoryLibMmx
|
||||||
|
# BaseMemoryLibSse2
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686:
|
||||||
|
#.MODEL flat,C
|
||||||
|
.code:
|
||||||
|
|
||||||
|
.global _InternalMemScanMem8
|
||||||
|
_InternalMemScanMem8:
|
||||||
|
push %edi
|
||||||
|
movl 12(%esp), %ecx
|
||||||
|
movl 8(%esp), %edi
|
||||||
|
movb 16(%esp), %al
|
||||||
|
repne scasb
|
||||||
|
leal -1(%edi), %eax
|
||||||
|
cmovnz %ecx, %eax
|
||||||
|
pop %edi
|
||||||
|
ret
|
66
MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem.asm
Normal file
66
MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem.asm
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
;------------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; Copyright (c) 2006, 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:
|
||||||
|
;
|
||||||
|
; SetMem function
|
||||||
|
;
|
||||||
|
; Notes:
|
||||||
|
;
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686
|
||||||
|
.model flat,C
|
||||||
|
.xmm
|
||||||
|
.code
|
||||||
|
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
; VOID *
|
||||||
|
; _mem_SetMem (
|
||||||
|
; IN VOID *Buffer,
|
||||||
|
; IN UINTN Count,
|
||||||
|
; IN UINT8 Value
|
||||||
|
; )
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
InternalMemSetMem PROC USES edi
|
||||||
|
mov ecx, [esp + 12] ; ecx <- Count
|
||||||
|
mov edi, [esp + 8] ; edi <- Buffer
|
||||||
|
mov edx, ecx
|
||||||
|
shr ecx, 3 ; # of Qwords to set
|
||||||
|
mov al, [esp + 16] ; al <- Value
|
||||||
|
jz @SetBytes
|
||||||
|
mov ah, al ; ax <- Value | (Value << 8)
|
||||||
|
push ecx
|
||||||
|
push ecx
|
||||||
|
movq [esp], mm0 ; save mm0
|
||||||
|
movd mm0, eax
|
||||||
|
pshufw mm0, mm0, 0 ; fill mm0 with 8 Value's
|
||||||
|
@@:
|
||||||
|
movntq [edi], mm0
|
||||||
|
add edi, 8
|
||||||
|
loop @B
|
||||||
|
mfence
|
||||||
|
movq mm0, [esp] ; restore mm0
|
||||||
|
pop ecx ; stack cleanup
|
||||||
|
pop ecx
|
||||||
|
@SetBytes:
|
||||||
|
and edx, 7
|
||||||
|
mov ecx, edx
|
||||||
|
rep stosb
|
||||||
|
mov eax, [esp + 8] ; eax <- Buffer as return value
|
||||||
|
ret
|
||||||
|
InternalMemSetMem ENDP
|
||||||
|
|
||||||
|
END
|
67
MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem.s
Normal file
67
MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem.s
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
#------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006, 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:
|
||||||
|
#
|
||||||
|
# SetMem function
|
||||||
|
#
|
||||||
|
# Notes:
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686:
|
||||||
|
#.MODEL flat,C
|
||||||
|
.xmm:
|
||||||
|
.code:
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# VOID *
|
||||||
|
# _mem_SetMem (
|
||||||
|
# IN VOID *Buffer,
|
||||||
|
# IN UINTN Count,
|
||||||
|
# IN UINT8 Value
|
||||||
|
# )
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
.global _InternalMemSetMem
|
||||||
|
_InternalMemSetMem:
|
||||||
|
push %edi
|
||||||
|
movl 12(%esp), %ecx # ecx <- Count
|
||||||
|
movl 8(%esp), %edi # edi <- Buffer
|
||||||
|
movl %ecx, %edx
|
||||||
|
shrl $3, %ecx # # of Qwords to set
|
||||||
|
movb 16(%esp), %al # al <- Value
|
||||||
|
jz @SetBytes
|
||||||
|
movb %al, %ah # ax <- Value | (Value << 8)
|
||||||
|
pushl %ecx
|
||||||
|
pushl %ecx
|
||||||
|
movq %mm0, (%esp) # save mm0
|
||||||
|
movd %eax, %mm0
|
||||||
|
pshufw $0x0,%mm0,%mm0
|
||||||
|
L0:
|
||||||
|
movntq %mm0, (%edi)
|
||||||
|
addl $8, %edi
|
||||||
|
loop L0
|
||||||
|
mfence
|
||||||
|
movq (%esp), %mm0 # restore mm0
|
||||||
|
popl %ecx # stack cleanup
|
||||||
|
popl %ecx
|
||||||
|
@SetBytes:
|
||||||
|
andl $7, %edx
|
||||||
|
movl %edx, %ecx
|
||||||
|
rep
|
||||||
|
stosb
|
||||||
|
movl 8(%esp), %eax # eax <- Buffer as return value
|
||||||
|
pop %edi
|
||||||
|
ret
|
59
MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem16.asm
Normal file
59
MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem16.asm
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
;------------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; Copyright (c) 2006, 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:
|
||||||
|
;
|
||||||
|
; SetMem16.asm
|
||||||
|
;
|
||||||
|
; Abstract:
|
||||||
|
;
|
||||||
|
; SetMem16 function
|
||||||
|
;
|
||||||
|
; Notes:
|
||||||
|
;
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686
|
||||||
|
.model flat,C
|
||||||
|
.xmm
|
||||||
|
.code
|
||||||
|
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
; VOID *
|
||||||
|
; _mem_SetMem16 (
|
||||||
|
; IN VOID *Buffer,
|
||||||
|
; IN UINTN Count,
|
||||||
|
; IN UINT16 Value
|
||||||
|
; )
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
InternalMemSetMem16 PROC USES edi
|
||||||
|
mov edx, [esp + 12]
|
||||||
|
mov edi, [esp + 8]
|
||||||
|
mov ecx, edx
|
||||||
|
and edx, 3
|
||||||
|
shr ecx, 2
|
||||||
|
mov eax, [esp + 16]
|
||||||
|
jz @SetWords
|
||||||
|
movd mm0, eax
|
||||||
|
pshufw mm0, mm0, 0
|
||||||
|
@@:
|
||||||
|
movntq [edi], mm0
|
||||||
|
add edi, 8
|
||||||
|
loop @B
|
||||||
|
mfence
|
||||||
|
@SetWords:
|
||||||
|
mov ecx, edx
|
||||||
|
rep stosw
|
||||||
|
mov eax, [esp + 8]
|
||||||
|
ret
|
||||||
|
InternalMemSetMem16 ENDP
|
||||||
|
|
||||||
|
END
|
60
MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem16.s
Normal file
60
MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem16.s
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
#------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006, 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:
|
||||||
|
#
|
||||||
|
# SetMem16.asm
|
||||||
|
#
|
||||||
|
# Abstract:
|
||||||
|
#
|
||||||
|
# SetMem16 function
|
||||||
|
#
|
||||||
|
# Notes:
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686:
|
||||||
|
#.MODEL flat,C
|
||||||
|
.xmm:
|
||||||
|
.code:
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# VOID *
|
||||||
|
# _mem_SetMem16 (
|
||||||
|
# IN VOID *Buffer,
|
||||||
|
# IN UINTN Count,
|
||||||
|
# IN UINT16 Value
|
||||||
|
# )
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
.global _InternalMemSetMem16
|
||||||
|
_InternalMemSetMem16:
|
||||||
|
push %edi
|
||||||
|
movl 12(%esp), %edx
|
||||||
|
movl 8(%esp), %edi
|
||||||
|
movl %edx, %ecx
|
||||||
|
andl $3, %edx
|
||||||
|
shrl $2, %ecx
|
||||||
|
movl 16(%esp), %eax
|
||||||
|
jz @SetWords
|
||||||
|
movd %eax, %mm0
|
||||||
|
pshufw $0, %mm0, %mm0
|
||||||
|
L0:
|
||||||
|
movntq %mm0, (%edi)
|
||||||
|
addl $8, %edi
|
||||||
|
loop L0
|
||||||
|
mfence
|
||||||
|
@SetWords:
|
||||||
|
movl %edx, %ecx
|
||||||
|
rep
|
||||||
|
stosw
|
||||||
|
movl 8(%esp), %eax
|
||||||
|
pop %edi
|
||||||
|
ret
|
59
MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem32.asm
Normal file
59
MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem32.asm
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
;------------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; Copyright (c) 2006, 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:
|
||||||
|
;
|
||||||
|
; SetMem32.asm
|
||||||
|
;
|
||||||
|
; Abstract:
|
||||||
|
;
|
||||||
|
; SetMem32 function
|
||||||
|
;
|
||||||
|
; Notes:
|
||||||
|
;
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686
|
||||||
|
.model flat,C
|
||||||
|
.xmm
|
||||||
|
.code
|
||||||
|
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
; VOID *
|
||||||
|
; _mem_SetMem32 (
|
||||||
|
; IN VOID *Buffer,
|
||||||
|
; IN UINTN Count,
|
||||||
|
; IN UINT32 Value
|
||||||
|
; )
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
InternalMemSetMem32 PROC USES edi
|
||||||
|
mov edx, [esp + 12]
|
||||||
|
mov edi, [esp + 8]
|
||||||
|
mov ecx, edx
|
||||||
|
shr ecx, 1
|
||||||
|
movd mm0, [esp + 16]
|
||||||
|
mov eax, edi
|
||||||
|
jz @SetDwords
|
||||||
|
pshufw mm0, mm0, 44h
|
||||||
|
@@:
|
||||||
|
movntq [edi], mm0
|
||||||
|
add edi, 8
|
||||||
|
loop @B
|
||||||
|
mfence
|
||||||
|
@SetDwords:
|
||||||
|
test dl, 1
|
||||||
|
jz @F
|
||||||
|
movd [edi], mm0
|
||||||
|
@@:
|
||||||
|
ret
|
||||||
|
InternalMemSetMem32 ENDP
|
||||||
|
|
||||||
|
END
|
59
MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem32.s
Normal file
59
MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem32.s
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
#------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006, 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:
|
||||||
|
#
|
||||||
|
# SetMem32.asm
|
||||||
|
#
|
||||||
|
# Abstract:
|
||||||
|
#
|
||||||
|
# SetMem32 function
|
||||||
|
#
|
||||||
|
# Notes:
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686:
|
||||||
|
#.MODEL flat,C
|
||||||
|
.xmm:
|
||||||
|
.code:
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# VOID *
|
||||||
|
# _mem_SetMem32 (
|
||||||
|
# IN VOID *Buffer,
|
||||||
|
# IN UINTN Count,
|
||||||
|
# IN UINT32 Value
|
||||||
|
# )
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
.global _InternalMemSetMem32
|
||||||
|
_InternalMemSetMem32:
|
||||||
|
push %edi
|
||||||
|
movl 12(%esp), %edx
|
||||||
|
movl 8(%esp), %edi
|
||||||
|
movl %edx, %ecx
|
||||||
|
shrl %ecx
|
||||||
|
movd 16(%esp), %mm0
|
||||||
|
movl %edi, %eax
|
||||||
|
jz @SetDwords
|
||||||
|
pshufw $0x44, %mm0, %mm0
|
||||||
|
L0:
|
||||||
|
movntq %mm0, (%edi)
|
||||||
|
addl $8, %edi
|
||||||
|
loopl L0
|
||||||
|
mfence
|
||||||
|
@SetDwords:
|
||||||
|
testb $1, %dl
|
||||||
|
jz @F
|
||||||
|
movd %mm0, (%edi)
|
||||||
|
L1:
|
||||||
|
pop %edi
|
||||||
|
ret
|
50
MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem64.asm
Normal file
50
MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem64.asm
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
;------------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; Copyright (c) 2006, 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:
|
||||||
|
;
|
||||||
|
; SetMem64.asm
|
||||||
|
;
|
||||||
|
; Abstract:
|
||||||
|
;
|
||||||
|
; SetMem64 function
|
||||||
|
;
|
||||||
|
; Notes:
|
||||||
|
;
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686
|
||||||
|
.model flat,C
|
||||||
|
.xmm
|
||||||
|
.code
|
||||||
|
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
; VOID *
|
||||||
|
; _mem_SetMem64 (
|
||||||
|
; IN VOID *Buffer,
|
||||||
|
; IN UINTN Count,
|
||||||
|
; IN UINT64 Value
|
||||||
|
; )
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
InternalMemSetMem64 PROC USES edi
|
||||||
|
movq mm0, [esp + 16]
|
||||||
|
mov ecx, [esp + 12]
|
||||||
|
mov edi, [esp + 8]
|
||||||
|
mov eax, edi
|
||||||
|
@@:
|
||||||
|
movntq [edi], mm0
|
||||||
|
add edi, 8
|
||||||
|
loop @B
|
||||||
|
mfence
|
||||||
|
ret
|
||||||
|
InternalMemSetMem64 ENDP
|
||||||
|
|
||||||
|
END
|
50
MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem64.s
Normal file
50
MdePkg/Library/BaseMemoryLibMmx/Ia32/SetMem64.s
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
#------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006, 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:
|
||||||
|
#
|
||||||
|
# SetMem64.asm
|
||||||
|
#
|
||||||
|
# Abstract:
|
||||||
|
#
|
||||||
|
# SetMem64 function
|
||||||
|
#
|
||||||
|
# Notes:
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686:
|
||||||
|
#.MODEL flat,C
|
||||||
|
.xmm:
|
||||||
|
.code:
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# VOID *
|
||||||
|
# _mem_SetMem64 (
|
||||||
|
# IN VOID *Buffer,
|
||||||
|
# IN UINTN Count,
|
||||||
|
# IN UINT64 Value
|
||||||
|
# )
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
.global _InternalMemSetMem64
|
||||||
|
_InternalMemSetMem64:
|
||||||
|
push %edi
|
||||||
|
movq 16(%esp), %mm0
|
||||||
|
movl 12(%esp), %ecx
|
||||||
|
movl 8(%esp), %edi
|
||||||
|
movl %edi, %eax
|
||||||
|
L0:
|
||||||
|
movntq %mm0, (%edi)
|
||||||
|
addl $8, %edi
|
||||||
|
loopl L0
|
||||||
|
mfence
|
||||||
|
pop %edi
|
||||||
|
ret
|
57
MdePkg/Library/BaseMemoryLibMmx/Ia32/ZeroMem.asm
Normal file
57
MdePkg/Library/BaseMemoryLibMmx/Ia32/ZeroMem.asm
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
;------------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; Copyright (c) 2006, 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:
|
||||||
|
;
|
||||||
|
; ZeroMem.asm
|
||||||
|
;
|
||||||
|
; Abstract:
|
||||||
|
;
|
||||||
|
; ZeroMem function
|
||||||
|
;
|
||||||
|
; Notes:
|
||||||
|
;
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686
|
||||||
|
.model flat,C
|
||||||
|
.xmm
|
||||||
|
.code
|
||||||
|
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
; VOID *
|
||||||
|
; _mem_ZeroMem (
|
||||||
|
; IN VOID *Buffer,
|
||||||
|
; IN UINTN Count
|
||||||
|
; )
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
InternalMemZeroMem PROC USES edi
|
||||||
|
mov edi, [esp + 8]
|
||||||
|
mov ecx, [esp + 12]
|
||||||
|
mov edx, ecx
|
||||||
|
shr ecx, 3
|
||||||
|
jz @ZeroBytes
|
||||||
|
pxor mm0, mm0
|
||||||
|
@@:
|
||||||
|
movntq [edi], mm0
|
||||||
|
add edi, 8
|
||||||
|
loop @B
|
||||||
|
mfence
|
||||||
|
@ZeroBytes:
|
||||||
|
and edx, 7
|
||||||
|
xor eax, eax
|
||||||
|
mov ecx, edx
|
||||||
|
rep stosb
|
||||||
|
mov eax, [esp + 8]
|
||||||
|
ret
|
||||||
|
InternalMemZeroMem ENDP
|
||||||
|
|
||||||
|
END
|
58
MdePkg/Library/BaseMemoryLibMmx/Ia32/ZeroMem.s
Normal file
58
MdePkg/Library/BaseMemoryLibMmx/Ia32/ZeroMem.s
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
#------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006, 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:
|
||||||
|
#
|
||||||
|
# ZeroMem.asm
|
||||||
|
#
|
||||||
|
# Abstract:
|
||||||
|
#
|
||||||
|
# ZeroMem function
|
||||||
|
#
|
||||||
|
# Notes:
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686:
|
||||||
|
#.MODEL flat,C
|
||||||
|
.xmm:
|
||||||
|
.code:
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# VOID *
|
||||||
|
# _mem_ZeroMem (
|
||||||
|
# IN VOID *Buffer,
|
||||||
|
# IN UINTN Count
|
||||||
|
# )
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
.global _InternalMemZeroMem
|
||||||
|
_InternalMemZeroMem:
|
||||||
|
push %edi
|
||||||
|
movl 8(%esp), %edi
|
||||||
|
movl 12(%esp), %ecx
|
||||||
|
movl %ecx, %edx
|
||||||
|
shrl $3, %ecx
|
||||||
|
jz @ZeroBytes
|
||||||
|
pxor %mm0, %mm0
|
||||||
|
L0:
|
||||||
|
movntq %mm0, (%edi)
|
||||||
|
addl $8, %edi
|
||||||
|
loop L0
|
||||||
|
mfence
|
||||||
|
@ZeroBytes:
|
||||||
|
andl $7, %edx
|
||||||
|
xorl %eax, %eax
|
||||||
|
movl %edx, %ecx
|
||||||
|
rep
|
||||||
|
stosb
|
||||||
|
movl 8(%esp), %eax
|
||||||
|
pop %edi
|
||||||
|
ret
|
46
MdePkg/Library/BaseMemoryLibSse2/Ia32/CompareMem.asm
Normal file
46
MdePkg/Library/BaseMemoryLibSse2/Ia32/CompareMem.asm
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
;------------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; Copyright (c) 2006, 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:
|
||||||
|
;
|
||||||
|
; CompareMem.Asm
|
||||||
|
;
|
||||||
|
; Abstract:
|
||||||
|
;
|
||||||
|
; CompareMem function
|
||||||
|
;
|
||||||
|
; Notes:
|
||||||
|
;
|
||||||
|
; The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
;
|
||||||
|
; BaseMemoryLibRepStr
|
||||||
|
; BaseMemoryLibMmx
|
||||||
|
; BaseMemoryLibSse2
|
||||||
|
;
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686
|
||||||
|
.model flat,C
|
||||||
|
.code
|
||||||
|
|
||||||
|
InternalMemCompareMem PROC USES esi edi
|
||||||
|
mov esi, [esp + 12]
|
||||||
|
mov edi, [esp + 16]
|
||||||
|
mov ecx, [esp + 20]
|
||||||
|
repe cmpsb
|
||||||
|
movzx eax, byte ptr [esi - 1]
|
||||||
|
movzx edx, byte ptr [edi - 1]
|
||||||
|
sub eax, edx
|
||||||
|
sub eax, edx
|
||||||
|
ret
|
||||||
|
InternalMemCompareMem ENDP
|
||||||
|
|
||||||
|
END
|
48
MdePkg/Library/BaseMemoryLibSse2/Ia32/CompareMem.s
Normal file
48
MdePkg/Library/BaseMemoryLibSse2/Ia32/CompareMem.s
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
#------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006, 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:
|
||||||
|
#
|
||||||
|
# CompareMem.Asm
|
||||||
|
#
|
||||||
|
# Abstract:
|
||||||
|
#
|
||||||
|
# CompareMem function
|
||||||
|
#
|
||||||
|
# Notes:
|
||||||
|
#
|
||||||
|
# The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
#
|
||||||
|
# BaseMemoryLibRepStr
|
||||||
|
# BaseMemoryLibMmx
|
||||||
|
# BaseMemoryLibSse2
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686:
|
||||||
|
#.MODEL flat,C
|
||||||
|
.code:
|
||||||
|
|
||||||
|
.global _InternalMemCompareMem
|
||||||
|
_InternalMemCompareMem:
|
||||||
|
push %esi
|
||||||
|
push %edi
|
||||||
|
movl 12(%esp), %esi
|
||||||
|
movl 16(%esp), %edi
|
||||||
|
movl 20(%esp), %ecx
|
||||||
|
repe cmpsb
|
||||||
|
movzbl -1(%esi), %eax
|
||||||
|
movzbl -1(%edi), %edx
|
||||||
|
subl %edx, %eax
|
||||||
|
subl %edx, %eax
|
||||||
|
pop %edi
|
||||||
|
pop %esi
|
||||||
|
ret
|
84
MdePkg/Library/BaseMemoryLibSse2/Ia32/CopyMem.asm
Normal file
84
MdePkg/Library/BaseMemoryLibSse2/Ia32/CopyMem.asm
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
;------------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; Copyright (c) 2006, 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:
|
||||||
|
;
|
||||||
|
; CopyMem function
|
||||||
|
;
|
||||||
|
; Notes:
|
||||||
|
;
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686
|
||||||
|
.model flat,C
|
||||||
|
.xmm
|
||||||
|
.code
|
||||||
|
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
; VOID *
|
||||||
|
; _mem_CopyMem (
|
||||||
|
; IN VOID *Destination,
|
||||||
|
; IN VOID *Source,
|
||||||
|
; IN UINTN Count
|
||||||
|
; )
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
InternalMemCopyMem PROC USES esi edi
|
||||||
|
mov esi, [esp + 16] ; esi <- Source
|
||||||
|
mov edi, [esp + 12] ; edi <- Destination
|
||||||
|
mov edx, [esp + 20] ; edx <- Count
|
||||||
|
lea eax, [edi + edx - 1] ; eax <- End of Destination
|
||||||
|
cmp esi, edi
|
||||||
|
jae @F
|
||||||
|
cmp eax, esi ; Overlapped?
|
||||||
|
jae @CopyBackward ; Copy backward if overlapped
|
||||||
|
@@:
|
||||||
|
xor ecx, ecx
|
||||||
|
sub ecx, edi
|
||||||
|
and ecx, 15 ; ecx + edi aligns on 16-byte boundary
|
||||||
|
jz @F
|
||||||
|
cmp ecx, edx
|
||||||
|
cmova ecx, edx
|
||||||
|
sub edx, ecx ; edx <- remaining bytes to copy
|
||||||
|
rep movsb
|
||||||
|
@@:
|
||||||
|
mov ecx, edx
|
||||||
|
and edx, 15
|
||||||
|
shr ecx, 4 ; ecx <- # of DQwords to copy
|
||||||
|
jz @CopyBytes
|
||||||
|
add esp, -16
|
||||||
|
movdqu [esp], xmm0 ; save xmm0
|
||||||
|
@@:
|
||||||
|
movdqu xmm0, [esi] ; esi may not be 16-bytes aligned
|
||||||
|
movntdq [edi], xmm0 ; edi should be 16-bytes aligned
|
||||||
|
add esi, 16
|
||||||
|
add edi, 16
|
||||||
|
loop @B
|
||||||
|
mfence
|
||||||
|
movdqu xmm0, [esp] ; restore xmm0
|
||||||
|
add esp, 16 ; stack cleanup
|
||||||
|
jmp @CopyBytes
|
||||||
|
@CopyBackward:
|
||||||
|
mov edi, eax ; edi <- Last byte in Destination
|
||||||
|
lea esi, [esi + edx - 1] ; esi <- Last byte in Source
|
||||||
|
std
|
||||||
|
@CopyBytes:
|
||||||
|
mov ecx, edx
|
||||||
|
rep movsb
|
||||||
|
cld
|
||||||
|
mov eax, [esp + 12] ; eax <- Destination as return value
|
||||||
|
ret
|
||||||
|
InternalMemCopyMem ENDP
|
||||||
|
|
||||||
|
END
|
88
MdePkg/Library/BaseMemoryLibSse2/Ia32/CopyMem.s
Normal file
88
MdePkg/Library/BaseMemoryLibSse2/Ia32/CopyMem.s
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
#------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006, 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:
|
||||||
|
#
|
||||||
|
# CopyMem function
|
||||||
|
#
|
||||||
|
# Notes:
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686:
|
||||||
|
#.MODEL flat,C
|
||||||
|
.xmm:
|
||||||
|
.code:
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# VOID *
|
||||||
|
# _mem_CopyMem (
|
||||||
|
# IN VOID *Destination,
|
||||||
|
# IN VOID *Source,
|
||||||
|
# IN UINTN Count
|
||||||
|
# )
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
.global _InternalMemCopyMem
|
||||||
|
_InternalMemCopyMem:
|
||||||
|
push %esi
|
||||||
|
push %edi
|
||||||
|
movl 16(%esp), %esi # esi <- Source
|
||||||
|
movl 12(%esp), %edi # edi <- Destination
|
||||||
|
movl 20(%esp), %edx # edx <- Count
|
||||||
|
leal -1(%edi,%edx,), %eax # eax <- End of Destination
|
||||||
|
cmpl %edi, %esi
|
||||||
|
jae L0
|
||||||
|
cmpl %esi, %eax # Overlapped?
|
||||||
|
jae @CopyBackward # Copy backward if overlapped
|
||||||
|
L0:
|
||||||
|
xorl %ecx, %ecx
|
||||||
|
subl %edi, %ecx
|
||||||
|
andl $15, %ecx # ecx + edi aligns on 16-byte boundary
|
||||||
|
jz L1
|
||||||
|
cmpl %edx, %ecx
|
||||||
|
cmova %edx, %ecx
|
||||||
|
subl %ecx, %edx # edx <- remaining bytes to copy
|
||||||
|
rep
|
||||||
|
movsb
|
||||||
|
L1:
|
||||||
|
movl %edx, %ecx
|
||||||
|
andl $15, %edx
|
||||||
|
shrl $4, %ecx # ecx <- # of DQwords to copy
|
||||||
|
jz @CopyBytes
|
||||||
|
addl $-16, %esp
|
||||||
|
movdqu %xmm0, (%esp)
|
||||||
|
L2:
|
||||||
|
movdqu (%esi), %xmm0
|
||||||
|
movntdq %xmm0, (%edi)
|
||||||
|
addl $16, %esi
|
||||||
|
addl $16, %edi
|
||||||
|
loop L2
|
||||||
|
mfence
|
||||||
|
movdqu (%esp),%xmm0
|
||||||
|
addl $16, %esp # stack cleanup
|
||||||
|
jmp @CopyBytes
|
||||||
|
@CopyBackward:
|
||||||
|
movl %eax, %edi # edi <- Last byte in Destination
|
||||||
|
leal -1(%esi,%edx,), %esi # esi <- Last byte in Source
|
||||||
|
std
|
||||||
|
@CopyBytes:
|
||||||
|
movl %edx, %ecx
|
||||||
|
rep
|
||||||
|
movsb
|
||||||
|
cld
|
||||||
|
movl 12(%esp), %eax # eax <- Destination as return value
|
||||||
|
pop %edi
|
||||||
|
pop %esi
|
||||||
|
ret
|
44
MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem16.asm
Normal file
44
MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem16.asm
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
;------------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; Copyright (c) 2006, 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:
|
||||||
|
;
|
||||||
|
; ScanMem16.Asm
|
||||||
|
;
|
||||||
|
; Abstract:
|
||||||
|
;
|
||||||
|
; ScanMem16 function
|
||||||
|
;
|
||||||
|
; Notes:
|
||||||
|
;
|
||||||
|
; The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
;
|
||||||
|
; BaseMemoryLibRepStr
|
||||||
|
; BaseMemoryLibMmx
|
||||||
|
; BaseMemoryLibSse2
|
||||||
|
;
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686
|
||||||
|
.model flat,C
|
||||||
|
.code
|
||||||
|
|
||||||
|
InternalMemScanMem16 PROC USES edi
|
||||||
|
mov ecx, [esp + 12]
|
||||||
|
mov edi, [esp + 8]
|
||||||
|
mov eax, [esp + 16]
|
||||||
|
repne scasw
|
||||||
|
lea eax, [edi - 2]
|
||||||
|
cmovnz eax, ecx
|
||||||
|
ret
|
||||||
|
InternalMemScanMem16 ENDP
|
||||||
|
|
||||||
|
END
|
44
MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem16.s
Normal file
44
MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem16.s
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006, 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:
|
||||||
|
#
|
||||||
|
# ScanMem16.Asm
|
||||||
|
#
|
||||||
|
# Abstract:
|
||||||
|
#
|
||||||
|
# ScanMem16 function
|
||||||
|
#
|
||||||
|
# Notes:
|
||||||
|
#
|
||||||
|
# The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
#
|
||||||
|
# BaseMemoryLibRepStr
|
||||||
|
# BaseMemoryLibMmx
|
||||||
|
# BaseMemoryLibSse2
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686:
|
||||||
|
#.MODEL flat,C
|
||||||
|
.code:
|
||||||
|
|
||||||
|
.global _InternalMemScanMem16
|
||||||
|
_InternalMemScanMem16:
|
||||||
|
push %edi
|
||||||
|
movl 12(%esp), %ecx
|
||||||
|
movl 8(%esp), %edi
|
||||||
|
movl 16(%esp), %eax
|
||||||
|
repne scasw
|
||||||
|
leal -2(%edi), %eax
|
||||||
|
cmovnz %ecx, %eax
|
||||||
|
pop %edi
|
||||||
|
ret
|
44
MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem32.asm
Normal file
44
MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem32.asm
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
;------------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; Copyright (c) 2006, 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:
|
||||||
|
;
|
||||||
|
; ScanMem32.Asm
|
||||||
|
;
|
||||||
|
; Abstract:
|
||||||
|
;
|
||||||
|
; ScanMem32 function
|
||||||
|
;
|
||||||
|
; Notes:
|
||||||
|
;
|
||||||
|
; The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
;
|
||||||
|
; BaseMemoryLibRepStr
|
||||||
|
; BaseMemoryLibMmx
|
||||||
|
; BaseMemoryLibSse2
|
||||||
|
;
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686
|
||||||
|
.model flat,C
|
||||||
|
.code
|
||||||
|
|
||||||
|
InternalMemScanMem32 PROC USES edi
|
||||||
|
mov ecx, [esp + 12]
|
||||||
|
mov edi, [esp + 8]
|
||||||
|
mov eax, [esp + 16]
|
||||||
|
repne scasd
|
||||||
|
lea eax, [edi - 4]
|
||||||
|
cmovnz eax, ecx
|
||||||
|
ret
|
||||||
|
InternalMemScanMem32 ENDP
|
||||||
|
|
||||||
|
END
|
44
MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem32.s
Normal file
44
MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem32.s
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006, 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:
|
||||||
|
#
|
||||||
|
# ScanMem32.Asm
|
||||||
|
#
|
||||||
|
# Abstract:
|
||||||
|
#
|
||||||
|
# ScanMem32 function
|
||||||
|
#
|
||||||
|
# Notes:
|
||||||
|
#
|
||||||
|
# The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
#
|
||||||
|
# BaseMemoryLibRepStr
|
||||||
|
# BaseMemoryLibMmx
|
||||||
|
# BaseMemoryLibSse2
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686:
|
||||||
|
#.MODEL flat,C
|
||||||
|
.code:
|
||||||
|
|
||||||
|
.global _InternalMemScanMem32
|
||||||
|
_InternalMemScanMem32:
|
||||||
|
push %edi
|
||||||
|
movl 12(%esp), %ecx
|
||||||
|
movl 8(%esp), %edi
|
||||||
|
movl 16(%esp), %eax
|
||||||
|
repnz scasl
|
||||||
|
leal -4(%edi), %eax
|
||||||
|
cmovnz %ecx, %eax
|
||||||
|
pop %edi
|
||||||
|
ret
|
53
MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem64.asm
Normal file
53
MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem64.asm
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
;------------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; Copyright (c) 2006, 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:
|
||||||
|
;
|
||||||
|
; ScanMem64.Asm
|
||||||
|
;
|
||||||
|
; Abstract:
|
||||||
|
;
|
||||||
|
; ScanMem64 function
|
||||||
|
;
|
||||||
|
; Notes:
|
||||||
|
;
|
||||||
|
; The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
;
|
||||||
|
; BaseMemoryLibRepStr
|
||||||
|
; BaseMemoryLibMmx
|
||||||
|
; BaseMemoryLibSse2
|
||||||
|
;
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686
|
||||||
|
.model flat,C
|
||||||
|
.code
|
||||||
|
|
||||||
|
InternalMemScanMem64 PROC USES edi
|
||||||
|
mov ecx, [esp + 12]
|
||||||
|
mov eax, [esp + 16]
|
||||||
|
mov edx, [esp + 20]
|
||||||
|
mov edi, [esp + 8]
|
||||||
|
@@:
|
||||||
|
cmp eax, [edi]
|
||||||
|
lea edi, [edi + 8]
|
||||||
|
loopne @B
|
||||||
|
jne @F
|
||||||
|
cmp edx, [edi - 4]
|
||||||
|
jecxz @F
|
||||||
|
jne @B
|
||||||
|
@@:
|
||||||
|
lea eax, [edi - 8]
|
||||||
|
cmovne eax, ecx
|
||||||
|
ret
|
||||||
|
InternalMemScanMem64 ENDP
|
||||||
|
|
||||||
|
END
|
53
MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem64.s
Normal file
53
MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem64.s
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
#------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006, 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:
|
||||||
|
#
|
||||||
|
# ScanMem64.Asm
|
||||||
|
#
|
||||||
|
# Abstract:
|
||||||
|
#
|
||||||
|
# ScanMem64 function
|
||||||
|
#
|
||||||
|
# Notes:
|
||||||
|
#
|
||||||
|
# The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
#
|
||||||
|
# BaseMemoryLibRepStr
|
||||||
|
# BaseMemoryLibMmx
|
||||||
|
# BaseMemoryLibSse2
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686:
|
||||||
|
#.MODEL flat,C
|
||||||
|
.code:
|
||||||
|
|
||||||
|
.global _InternalMemScanMem64
|
||||||
|
_InternalMemScanMem64:
|
||||||
|
push %edi
|
||||||
|
movl 12(%esp), %ecx
|
||||||
|
movl 16(%esp), %eax
|
||||||
|
movl 20(%esp), %edx
|
||||||
|
movl 8(%esp), %edi
|
||||||
|
L0:
|
||||||
|
cmpl (%edi), %eax
|
||||||
|
leal 8(%edi), %edi
|
||||||
|
loopne L0
|
||||||
|
jne L1
|
||||||
|
cmpl -4(%edi), %edx
|
||||||
|
jecxz L1
|
||||||
|
jne L0
|
||||||
|
L1:
|
||||||
|
leal -8(%edi), %eax
|
||||||
|
cmovne %ecx, %eax
|
||||||
|
pop %edi
|
||||||
|
ret
|
44
MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem8.asm
Normal file
44
MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem8.asm
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
;------------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; Copyright (c) 2006, 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:
|
||||||
|
;
|
||||||
|
; ScanMem8.Asm
|
||||||
|
;
|
||||||
|
; Abstract:
|
||||||
|
;
|
||||||
|
; ScanMem8 function
|
||||||
|
;
|
||||||
|
; Notes:
|
||||||
|
;
|
||||||
|
; The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
;
|
||||||
|
; BaseMemoryLibRepStr
|
||||||
|
; BaseMemoryLibMmx
|
||||||
|
; BaseMemoryLibSse2
|
||||||
|
;
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686
|
||||||
|
.model flat,C
|
||||||
|
.code
|
||||||
|
|
||||||
|
InternalMemScanMem8 PROC USES edi
|
||||||
|
mov ecx, [esp + 12]
|
||||||
|
mov edi, [esp + 8]
|
||||||
|
mov al, [esp + 16]
|
||||||
|
repne scasb
|
||||||
|
lea eax, [edi - 1]
|
||||||
|
cmovnz eax, ecx
|
||||||
|
ret
|
||||||
|
InternalMemScanMem8 ENDP
|
||||||
|
|
||||||
|
END
|
44
MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem8.s
Normal file
44
MdePkg/Library/BaseMemoryLibSse2/Ia32/ScanMem8.s
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006, 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:
|
||||||
|
#
|
||||||
|
# ScanMem8.Asm
|
||||||
|
#
|
||||||
|
# Abstract:
|
||||||
|
#
|
||||||
|
# ScanMem8 function
|
||||||
|
#
|
||||||
|
# Notes:
|
||||||
|
#
|
||||||
|
# The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
#
|
||||||
|
# BaseMemoryLibRepStr
|
||||||
|
# BaseMemoryLibMmx
|
||||||
|
# BaseMemoryLibSse2
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686:
|
||||||
|
#.MODEL flat,C
|
||||||
|
.code:
|
||||||
|
|
||||||
|
.global _InternalMemScanMem8
|
||||||
|
_InternalMemScanMem8:
|
||||||
|
push %edi
|
||||||
|
movl 12(%esp), %ecx
|
||||||
|
movl 8(%esp), %edi
|
||||||
|
movb 16(%esp), %al
|
||||||
|
repne scasb
|
||||||
|
leal -1(%edi), %eax
|
||||||
|
cmovnz %ecx, %eax
|
||||||
|
pop %edi
|
||||||
|
ret
|
74
MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem.asm
Normal file
74
MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem.asm
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
;------------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; Copyright (c) 2006, 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:
|
||||||
|
;
|
||||||
|
; SetMem function
|
||||||
|
;
|
||||||
|
; Notes:
|
||||||
|
;
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686
|
||||||
|
.model flat,C
|
||||||
|
.xmm
|
||||||
|
.code
|
||||||
|
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
; VOID *
|
||||||
|
; _mem_SetMem (
|
||||||
|
; IN VOID *Buffer,
|
||||||
|
; IN UINTN Count,
|
||||||
|
; IN UINT8 Value
|
||||||
|
; )
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
InternalMemSetMem PROC USES edi
|
||||||
|
mov edx, [esp + 12] ; edx <- Count
|
||||||
|
mov edi, [esp + 8] ; edi <- Buffer
|
||||||
|
mov al, [esp + 16] ; al <- Value
|
||||||
|
xor ecx, ecx
|
||||||
|
sub ecx, edi
|
||||||
|
and ecx, 15 ; ecx + edi aligns on 16-byte boundary
|
||||||
|
jz @F
|
||||||
|
cmp ecx, edx
|
||||||
|
cmova ecx, edx
|
||||||
|
sub edx, ecx
|
||||||
|
rep stosb
|
||||||
|
@@:
|
||||||
|
mov ecx, edx
|
||||||
|
and edx, 15
|
||||||
|
shr ecx, 4 ; ecx <- # of DQwords to set
|
||||||
|
jz @SetBytes
|
||||||
|
mov ah, al ; ax <- Value | (Value << 8)
|
||||||
|
add esp, -16
|
||||||
|
movdqu [esp], xmm0 ; save xmm0
|
||||||
|
movd xmm0, eax
|
||||||
|
pshuflw xmm0, xmm0, 0 ; xmm0[0..63] <- Value repeats 8 times
|
||||||
|
movlhps xmm0, xmm0 ; xmm0 <- Value repeats 16 times
|
||||||
|
@@:
|
||||||
|
movntdq [edi], xmm0 ; edi should be 16-byte aligned
|
||||||
|
add edi, 16
|
||||||
|
loop @B
|
||||||
|
mfence
|
||||||
|
movdqu xmm0, [esp] ; restore xmm0
|
||||||
|
add esp, 16 ; stack cleanup
|
||||||
|
@SetBytes:
|
||||||
|
mov ecx, edx
|
||||||
|
rep stosb
|
||||||
|
mov eax, [esp + 8] ; eax <- Buffer as return value
|
||||||
|
ret
|
||||||
|
InternalMemSetMem ENDP
|
||||||
|
|
||||||
|
END
|
76
MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem.s
Normal file
76
MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem.s
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
#------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006, 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:
|
||||||
|
#
|
||||||
|
# SetMem function
|
||||||
|
#
|
||||||
|
# Notes:
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686:
|
||||||
|
#.MODEL flat,C
|
||||||
|
.xmm:
|
||||||
|
.code:
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# VOID *
|
||||||
|
# _mem_SetMem (
|
||||||
|
# IN VOID *Buffer,
|
||||||
|
# IN UINTN Count,
|
||||||
|
# IN UINT8 Value
|
||||||
|
# )
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
.global _InternalMemSetMem
|
||||||
|
_InternalMemSetMem:
|
||||||
|
push %edi
|
||||||
|
movl 12(%esp), %edx # edx <- Count
|
||||||
|
movl 8(%esp), %edi # edi <- Buffer
|
||||||
|
movb 16(%esp), %al # al <- Value
|
||||||
|
xorl %ecx, %ecx
|
||||||
|
subl %edi, %ecx
|
||||||
|
andl $15, %ecx # ecx + edi aligns on 16-byte boundary
|
||||||
|
jz L0
|
||||||
|
cmpl %edx, %ecx
|
||||||
|
cmova %edx, %ecx
|
||||||
|
subl %ecx, %edx
|
||||||
|
rep
|
||||||
|
stosb
|
||||||
|
L0:
|
||||||
|
movl %edx, %ecx
|
||||||
|
andl $15, %edx
|
||||||
|
shrl $4, %ecx # ecx <- # of DQwords to set
|
||||||
|
jz @SetBytes
|
||||||
|
movb %al, %ah # ax <- Value | (Value << 8)
|
||||||
|
addl $-16, %esp
|
||||||
|
movdqu %xmm0, (%esp)
|
||||||
|
movd %eax, %xmm0
|
||||||
|
pshuflw $0, %xmm0, %xmm0
|
||||||
|
movlhps %xmm0, %xmm0
|
||||||
|
L1:
|
||||||
|
movntdq %xmm0, (%edi)
|
||||||
|
addl $16, %edi
|
||||||
|
loop L1
|
||||||
|
mfence
|
||||||
|
movdqu (%esp), %xmm0
|
||||||
|
addl $16, %esp # stack cleanup
|
||||||
|
@SetBytes:
|
||||||
|
movl %edx, %ecx
|
||||||
|
rep
|
||||||
|
stosb
|
||||||
|
movl 8(%esp), %eax # eax <- Buffer as return value
|
||||||
|
pop %edi
|
||||||
|
ret
|
70
MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem16.asm
Normal file
70
MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem16.asm
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
;------------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; Copyright (c) 2006, 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:
|
||||||
|
;
|
||||||
|
; SetMem16.asm
|
||||||
|
;
|
||||||
|
; Abstract:
|
||||||
|
;
|
||||||
|
; SetMem16 function
|
||||||
|
;
|
||||||
|
; Notes:
|
||||||
|
;
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686
|
||||||
|
.model flat,C
|
||||||
|
.xmm
|
||||||
|
.code
|
||||||
|
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
; VOID *
|
||||||
|
; _mem_SetMem16 (
|
||||||
|
; IN VOID *Buffer,
|
||||||
|
; IN UINTN Count,
|
||||||
|
; IN UINT16 Value
|
||||||
|
; )
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
InternalMemSetMem16 PROC USES edi
|
||||||
|
mov edx, [esp + 12]
|
||||||
|
mov edi, [esp + 8]
|
||||||
|
xor ecx, ecx
|
||||||
|
sub ecx, edi
|
||||||
|
and ecx, 15 ; ecx + edi aligns on 16-byte boundary
|
||||||
|
mov eax, [esp + 16]
|
||||||
|
jz @F
|
||||||
|
shr ecx, 1
|
||||||
|
cmp ecx, edx
|
||||||
|
cmova ecx, edx
|
||||||
|
sub edx, ecx
|
||||||
|
rep stosw
|
||||||
|
@@:
|
||||||
|
mov ecx, edx
|
||||||
|
and edx, 7
|
||||||
|
shr ecx, 3
|
||||||
|
jz @SetWords
|
||||||
|
movd xmm0, eax
|
||||||
|
pshuflw xmm0, xmm0, 0
|
||||||
|
movlhps xmm0, xmm0
|
||||||
|
@@:
|
||||||
|
movntdq [edi], xmm0 ; edi should be 16-byte aligned
|
||||||
|
add edi, 16
|
||||||
|
loop @B
|
||||||
|
mfence
|
||||||
|
@SetWords:
|
||||||
|
mov ecx, edx
|
||||||
|
rep stosw
|
||||||
|
mov eax, [esp + 8]
|
||||||
|
ret
|
||||||
|
InternalMemSetMem16 ENDP
|
||||||
|
|
||||||
|
END
|
72
MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem16.s
Normal file
72
MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem16.s
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
#------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006, 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:
|
||||||
|
#
|
||||||
|
# SetMem16.asm
|
||||||
|
#
|
||||||
|
# Abstract:
|
||||||
|
#
|
||||||
|
# SetMem16 function
|
||||||
|
#
|
||||||
|
# Notes:
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686:
|
||||||
|
#.MODEL flat,C
|
||||||
|
.xmm:
|
||||||
|
.code:
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# VOID *
|
||||||
|
# _mem_SetMem16 (
|
||||||
|
# IN VOID *Buffer,
|
||||||
|
# IN UINTN Count,
|
||||||
|
# IN UINT16 Value
|
||||||
|
# )
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
.global _InternalMemSetMem16
|
||||||
|
_InternalMemSetMem16:
|
||||||
|
push %edi
|
||||||
|
movl 12(%esp), %edx
|
||||||
|
movl 8(%esp), %edi
|
||||||
|
xorl %ecx, %ecx
|
||||||
|
subl %edi, %ecx
|
||||||
|
andl $15, %ecx # ecx + edi aligns on 16-byte boundary
|
||||||
|
movl 16(%esp), %eax
|
||||||
|
jz L0
|
||||||
|
shrl %ecx
|
||||||
|
cmpl %edx, %ecx
|
||||||
|
cmova %edx, %ecx
|
||||||
|
subl %ecx, %edx
|
||||||
|
rep
|
||||||
|
stosw
|
||||||
|
L0:
|
||||||
|
movl %edx, %ecx
|
||||||
|
andl $7, %edx
|
||||||
|
shrl $3, %ecx
|
||||||
|
jz @SetWords
|
||||||
|
movd %eax, %xmm0
|
||||||
|
pshuflw $0, %xmm0, %xmm0
|
||||||
|
movlhps %xmm0, %xmm0
|
||||||
|
L1:
|
||||||
|
movntdq %xmm0, (%edi)
|
||||||
|
addl $16, %edi
|
||||||
|
loop L1
|
||||||
|
mfence
|
||||||
|
@SetWords:
|
||||||
|
movl %edx, %ecx
|
||||||
|
rep
|
||||||
|
stosw
|
||||||
|
movl 8(%esp), %eax
|
||||||
|
pop %edi
|
||||||
|
ret
|
69
MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem32.asm
Normal file
69
MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem32.asm
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
;------------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; Copyright (c) 2006, 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:
|
||||||
|
;
|
||||||
|
; SetMem32.asm
|
||||||
|
;
|
||||||
|
; Abstract:
|
||||||
|
;
|
||||||
|
; SetMem32 function
|
||||||
|
;
|
||||||
|
; Notes:
|
||||||
|
;
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686
|
||||||
|
.model flat,C
|
||||||
|
.xmm
|
||||||
|
.code
|
||||||
|
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
; VOID *
|
||||||
|
; _mem_SetMem32 (
|
||||||
|
; IN VOID *Buffer,
|
||||||
|
; IN UINTN Count,
|
||||||
|
; IN UINT32 Value
|
||||||
|
; )
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
InternalMemSetMem32 PROC USES edi
|
||||||
|
mov edx, [esp + 12]
|
||||||
|
mov edi, [esp + 8]
|
||||||
|
xor ecx, ecx
|
||||||
|
sub ecx, edi
|
||||||
|
and ecx, 15 ; ecx + edi aligns on 16-byte boundary
|
||||||
|
mov eax, [esp + 16]
|
||||||
|
jz @F
|
||||||
|
shr ecx, 2
|
||||||
|
cmp ecx, edx
|
||||||
|
cmova ecx, edx
|
||||||
|
sub edx, ecx
|
||||||
|
rep stosd
|
||||||
|
@@:
|
||||||
|
mov ecx, edx
|
||||||
|
and edx, 3
|
||||||
|
shr ecx, 2
|
||||||
|
jz @SetDwords
|
||||||
|
movd xmm0, eax
|
||||||
|
pshufd xmm0, xmm0, 0
|
||||||
|
@@:
|
||||||
|
movntdq [edi], xmm0
|
||||||
|
add edi, 16
|
||||||
|
loop @B
|
||||||
|
mfence
|
||||||
|
@SetDwords:
|
||||||
|
mov ecx, edx
|
||||||
|
rep stosd
|
||||||
|
mov eax, [esp + 8]
|
||||||
|
ret
|
||||||
|
InternalMemSetMem32 ENDP
|
||||||
|
|
||||||
|
END
|
71
MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem32.s
Normal file
71
MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem32.s
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
#------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006, 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:
|
||||||
|
#
|
||||||
|
# SetMem32.asm
|
||||||
|
#
|
||||||
|
# Abstract:
|
||||||
|
#
|
||||||
|
# SetMem32 function
|
||||||
|
#
|
||||||
|
# Notes:
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686:
|
||||||
|
#.MODEL flat,C
|
||||||
|
.xmm:
|
||||||
|
.code:
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# VOID *
|
||||||
|
# _mem_SetMem32 (
|
||||||
|
# IN VOID *Buffer,
|
||||||
|
# IN UINTN Count,
|
||||||
|
# IN UINT32 Value
|
||||||
|
# )
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
.global _InternalMemSetMem32
|
||||||
|
_InternalMemSetMem32:
|
||||||
|
push %edi
|
||||||
|
movl 12(%esp), %edx
|
||||||
|
movl 8(%esp), %edi
|
||||||
|
xorl %ecx, %ecx
|
||||||
|
subl %edi, %ecx
|
||||||
|
andl $15, %ecx # ecx + edi aligns on 16-byte boundary
|
||||||
|
movl 16(%esp), %eax
|
||||||
|
jz L0
|
||||||
|
shrl $2, %ecx
|
||||||
|
cmpl %edx, %ecx
|
||||||
|
cmova %edx, %ecx
|
||||||
|
subl %ecx, %edx
|
||||||
|
rep
|
||||||
|
stosl
|
||||||
|
L0:
|
||||||
|
movl %edx, %ecx
|
||||||
|
andl $3, %edx
|
||||||
|
shrl $2, %ecx
|
||||||
|
jz @SetDwords
|
||||||
|
movd %eax, %xmm0
|
||||||
|
pshufd $0, %xmm0, %xmm0
|
||||||
|
L1:
|
||||||
|
movntdq %xmm0, (%edi)
|
||||||
|
addl $16, %edi
|
||||||
|
loop L1
|
||||||
|
mfence
|
||||||
|
@SetDwords:
|
||||||
|
movl %edx, %ecx
|
||||||
|
rep
|
||||||
|
stosl
|
||||||
|
movl 8(%esp), %eax
|
||||||
|
pop %edi
|
||||||
|
ret
|
63
MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem64.asm
Normal file
63
MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem64.asm
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
;------------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; Copyright (c) 2006, 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:
|
||||||
|
;
|
||||||
|
; SetMem64.asm
|
||||||
|
;
|
||||||
|
; Abstract:
|
||||||
|
;
|
||||||
|
; SetMem64 function
|
||||||
|
;
|
||||||
|
; Notes:
|
||||||
|
;
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686
|
||||||
|
.model flat,C
|
||||||
|
.xmm
|
||||||
|
.code
|
||||||
|
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
; VOID *
|
||||||
|
; _mem_SetMem64 (
|
||||||
|
; IN VOID *Buffer,
|
||||||
|
; IN UINTN Count,
|
||||||
|
; IN UINT64 Value
|
||||||
|
; )
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
InternalMemSetMem64 PROC USES edi
|
||||||
|
mov ecx, [esp + 12]
|
||||||
|
mov edi, [esp + 8]
|
||||||
|
test edi, 8
|
||||||
|
DB 0f2h, 0fh, 12h, 44h, 24h, 16 ; movddup xmm0, [esp + 16]
|
||||||
|
jz @F
|
||||||
|
movq [edi], xmm0
|
||||||
|
add edi, 8
|
||||||
|
dec ecx
|
||||||
|
@@:
|
||||||
|
mov edx, ecx
|
||||||
|
shr ecx, 1
|
||||||
|
jz @SetQwords
|
||||||
|
@@:
|
||||||
|
movntdq [edi], xmm0
|
||||||
|
add edi, 16
|
||||||
|
loop @B
|
||||||
|
mfence
|
||||||
|
@SetQwords:
|
||||||
|
test dl, 1
|
||||||
|
jz @F
|
||||||
|
movq [edi], xmm0
|
||||||
|
@@:
|
||||||
|
ret
|
||||||
|
InternalMemSetMem64 ENDP
|
||||||
|
|
||||||
|
END
|
63
MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem64.s
Normal file
63
MdePkg/Library/BaseMemoryLibSse2/Ia32/SetMem64.s
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
#------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006, 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:
|
||||||
|
#
|
||||||
|
# SetMem64.asm
|
||||||
|
#
|
||||||
|
# Abstract:
|
||||||
|
#
|
||||||
|
# SetMem64 function
|
||||||
|
#
|
||||||
|
# Notes:
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686:
|
||||||
|
#.MODEL flat,C
|
||||||
|
.xmm:
|
||||||
|
.code:
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# VOID *
|
||||||
|
# _mem_SetMem64 (
|
||||||
|
# IN VOID *Buffer,
|
||||||
|
# IN UINTN Count,
|
||||||
|
# IN UINT64 Value
|
||||||
|
# )
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
.global _InternalMemSetMem64
|
||||||
|
_InternalMemSetMem64:
|
||||||
|
push %edi
|
||||||
|
movl 12(%esp), %ecx
|
||||||
|
movl 8(%esp), %edi
|
||||||
|
testl $8, %edi
|
||||||
|
movddup 16(%esp), %xmm0
|
||||||
|
jz L0
|
||||||
|
movq %xmm0, (%edi)
|
||||||
|
addl $8, %edi
|
||||||
|
decl %ecx
|
||||||
|
L0:
|
||||||
|
movl %ecx, %edx
|
||||||
|
shrl %ecx
|
||||||
|
jz @SetQwords
|
||||||
|
L1:
|
||||||
|
movntdq %xmm0, (%edi)
|
||||||
|
addl $16, %edi
|
||||||
|
loop L1
|
||||||
|
mfence
|
||||||
|
@SetQwords:
|
||||||
|
testb $1, %dl
|
||||||
|
jz L2
|
||||||
|
movq %xmm0, (%edi)
|
||||||
|
L2:
|
||||||
|
pop %edi
|
||||||
|
ret
|
66
MdePkg/Library/BaseMemoryLibSse2/Ia32/ZeroMem.asm
Normal file
66
MdePkg/Library/BaseMemoryLibSse2/Ia32/ZeroMem.asm
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
;------------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; Copyright (c) 2006, 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:
|
||||||
|
;
|
||||||
|
; ZeroMem.asm
|
||||||
|
;
|
||||||
|
; Abstract:
|
||||||
|
;
|
||||||
|
; ZeroMem function
|
||||||
|
;
|
||||||
|
; Notes:
|
||||||
|
;
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686
|
||||||
|
.model flat,C
|
||||||
|
.xmm
|
||||||
|
.code
|
||||||
|
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
; VOID *
|
||||||
|
; _mem_ZeroMem (
|
||||||
|
; IN VOID *Buffer,
|
||||||
|
; IN UINTN Count
|
||||||
|
; )
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
InternalMemZeroMem PROC USES edi
|
||||||
|
mov edi, [esp + 8]
|
||||||
|
mov edx, [esp + 12]
|
||||||
|
xor ecx, ecx
|
||||||
|
sub ecx, edi
|
||||||
|
xor eax, eax
|
||||||
|
and ecx, 15
|
||||||
|
jz @F
|
||||||
|
cmp ecx, edx
|
||||||
|
cmova ecx, edx
|
||||||
|
sub edx, ecx
|
||||||
|
rep stosb
|
||||||
|
@@:
|
||||||
|
mov ecx, edx
|
||||||
|
and edx, 15
|
||||||
|
shr ecx, 4
|
||||||
|
jz @ZeroBytes
|
||||||
|
pxor xmm0, xmm0
|
||||||
|
@@:
|
||||||
|
movntdq [edi], xmm0
|
||||||
|
add edi, 16
|
||||||
|
loop @B
|
||||||
|
mfence
|
||||||
|
@ZeroBytes:
|
||||||
|
mov ecx, edx
|
||||||
|
rep stosb
|
||||||
|
mov eax, [esp + 8]
|
||||||
|
ret
|
||||||
|
InternalMemZeroMem ENDP
|
||||||
|
|
||||||
|
END
|
68
MdePkg/Library/BaseMemoryLibSse2/Ia32/ZeroMem.s
Normal file
68
MdePkg/Library/BaseMemoryLibSse2/Ia32/ZeroMem.s
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
#------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006, 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:
|
||||||
|
#
|
||||||
|
# ZeroMem.asm
|
||||||
|
#
|
||||||
|
# Abstract:
|
||||||
|
#
|
||||||
|
# ZeroMem function
|
||||||
|
#
|
||||||
|
# Notes:
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686:
|
||||||
|
#.MODEL flat,C
|
||||||
|
.xmm:
|
||||||
|
.code:
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# VOID *
|
||||||
|
# _mem_ZeroMem (
|
||||||
|
# IN VOID *Buffer,
|
||||||
|
# IN UINTN Count
|
||||||
|
# )
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
.global _InternalMemZeroMem
|
||||||
|
_InternalMemZeroMem:
|
||||||
|
push %edi
|
||||||
|
movl 8(%esp), %edi
|
||||||
|
movl 12(%esp), %edx
|
||||||
|
xorl %ecx, %ecx
|
||||||
|
subl %edi, %ecx
|
||||||
|
xorl %eax, %eax
|
||||||
|
andl $15, %ecx
|
||||||
|
jz L0
|
||||||
|
cmpl %edx, %ecx
|
||||||
|
cmova %edx, %ecx
|
||||||
|
subl %ecx, %edx
|
||||||
|
rep
|
||||||
|
stosb
|
||||||
|
L0:
|
||||||
|
movl %edx, %ecx
|
||||||
|
andl $15, %edx
|
||||||
|
shrl $4, %ecx
|
||||||
|
jz @ZeroBytes
|
||||||
|
pxor %xmm0, %xmm0
|
||||||
|
L1:
|
||||||
|
movntdq %xmm0, (%edi)
|
||||||
|
addl $16, %edi
|
||||||
|
loop L1
|
||||||
|
mfence
|
||||||
|
@ZeroBytes:
|
||||||
|
movl %edx, %ecx
|
||||||
|
rep
|
||||||
|
stosb
|
||||||
|
movl 8(%esp), %eax
|
||||||
|
pop %edi
|
||||||
|
ret
|
@ -38,7 +38,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
<SourceFiles>
|
<SourceFiles>
|
||||||
<Filename>BasePeCoff.c</Filename>
|
<Filename>BasePeCoff.c</Filename>
|
||||||
<Arch ArchType="IA32">
|
<Arch ArchType="IA32">
|
||||||
<Filename>ia32/PeCoffLoaderEx.c</Filename>
|
<Filename>Ia32/PeCoffLoaderEx.c</Filename>
|
||||||
</Arch>
|
</Arch>
|
||||||
<Arch ArchType="X64">
|
<Arch ArchType="X64">
|
||||||
<Filename>x64/PeCoffLoaderEx.c</Filename>
|
<Filename>x64/PeCoffLoaderEx.c</Filename>
|
||||||
|
Reference in New Issue
Block a user