mirror of https://github.com/acidanthera/audk.git
Port to GNU assembly.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@188 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
b6bd81d45f
commit
c92e764e05
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
Loading…
Reference in New Issue