Fix .S assembler building issue.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@6203 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
eric_tian
2008-10-24 02:21:54 +00:00
parent 4d9ff8bee4
commit 2fb8d3e2df

View File

@ -1,65 +1,58 @@
;------------------------------------------------------------------------------ #------------------------------------------------------------------------------
; #
; Copyright (c) 2006, Intel Corporation # Copyright (c) 2006, Intel Corporation
; All rights reserved. This program and the accompanying materials # All rights reserved. This program and the accompanying materials
; are licensed and made available under the terms and conditions of the BSD License # 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 # which accompanies this distribution. The full text of the license may be found at
; http://opensource.org/licenses/bsd-license.php # http://opensource.org/licenses/bsd-license.php
; #
; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
; #
; Module Name: # Module Name:
; #
; SetMem.Asm # SetMem.Asm
; #
; Abstract: # Abstract:
; #
; SetMem function # SetMem function
; #
; Notes: # Notes:
; #
;------------------------------------------------------------------------------ #------------------------------------------------------------------------------
#------------------------------------------------------------------------------
.code # VOID *
# EFIAPI
;------------------------------------------------------------------------------ # InternalMemSetMem (
; VOID * # IN VOID *Buffer,
; EFIAPI # IN UINTN Count,
; InternalMemSetMem ( # IN UINT8 Value
; IN VOID *Buffer, # )
; IN UINTN Count, #------------------------------------------------------------------------------
; IN UINT8 Value
; )
;------------------------------------------------------------------------------
.intel_syntax noprefix .intel_syntax noprefix
.globl ASM_PFX(InternalMemSetMem) .globl ASM_PFX(InternalMemSetMem)
ASM_PFX(InternalMemZeroMem): ASM_PFX(InternalMemZeroMem):
InternalMemSetMem PROC USES rdi rbx
push rdi push rdi
push rbx push rbx
push rcx ; push Buffer push rcx # push Buffer
mov rax, r8 ; rax = Value mov rax, r8 # rax = Value
and rax, 0ffh ; rax = lower 8 bits of r8, upper 56 bits are 0 and rax, 0xff # rax = lower 8 bits of r8, upper 56 bits are 0
mov ah, al ; ah = al mov ah, al # ah = al
mov bx, ax ; bx = ax mov bx, ax # bx = ax
shl rax, 10h ; rax = ax << 16 shl rax, 0x10 # rax = ax << 16
mov ax, bx ; ax = bx mov ax, bx # ax = bx
mov rbx, rax ; ebx = eax mov rbx, rax # ebx = eax
shl rax, 20h ; rax = rax << 32 shl rax, 0x20 # rax = rax << 32
or rax, rbx ; eax = ebx or rax, rbx # eax = ebx
mov rdi, rcx ; rdi = Buffer mov rdi, rcx # rdi = Buffer
mov rcx, rdx ; rcx = Count mov rcx, rdx # rcx = Count
shr rcx, 3 ; rcx = rcx / 8 shr rcx, 3 # rcx = rcx / 8
cld cld
rep stosq rep stosq
mov rcx, rdx ; rcx = rdx mov rcx, rdx # rcx = rdx
and rcx, 7 ; rcx = rcx & 7 and rcx, 7 # rcx = rcx & 7
rep stosb rep stosb
pop rax ; rax = Buffer pop rax # rax = Buffer
pop rbx pop rbx
pop rdi pop rdi
ret ret
InternalMemSetMem ENDP
END