From 2fb8d3e2dfb4476d02c240fd20fe0b5a24398d58 Mon Sep 17 00:00:00 2001 From: eric_tian Date: Fri, 24 Oct 2008 02:21:54 +0000 Subject: [PATCH] Fix .S assembler building issue. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@6203 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Library/BaseMemoryLibOptDxe/X64/SetMem.S | 101 ++++++++---------- 1 file changed, 47 insertions(+), 54 deletions(-) diff --git a/MdePkg/Library/BaseMemoryLibOptDxe/X64/SetMem.S b/MdePkg/Library/BaseMemoryLibOptDxe/X64/SetMem.S index 3453431926..e2c4c47474 100644 --- a/MdePkg/Library/BaseMemoryLibOptDxe/X64/SetMem.S +++ b/MdePkg/Library/BaseMemoryLibOptDxe/X64/SetMem.S @@ -1,65 +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: -; -; SetMem.Asm -; -; Abstract: -; -; SetMem function -; -; Notes: -; -;------------------------------------------------------------------------------ - - .code - -;------------------------------------------------------------------------------ -; VOID * -; EFIAPI -; InternalMemSetMem ( -; IN VOID *Buffer, -; IN UINTN Count, -; IN UINT8 Value -; ) -;------------------------------------------------------------------------------ +#------------------------------------------------------------------------------ +# +# 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: +# +#------------------------------------------------------------------------------ +#------------------------------------------------------------------------------ +# VOID * +# EFIAPI +# InternalMemSetMem ( +# IN VOID *Buffer, +# IN UINTN Count, +# IN UINT8 Value +# ) +#------------------------------------------------------------------------------ .intel_syntax noprefix .globl ASM_PFX(InternalMemSetMem) ASM_PFX(InternalMemZeroMem): -InternalMemSetMem PROC USES rdi rbx push rdi push rbx - push rcx ; push Buffer - mov rax, r8 ; rax = Value - and rax, 0ffh ; rax = lower 8 bits of r8, upper 56 bits are 0 - mov ah, al ; ah = al - mov bx, ax ; bx = ax - shl rax, 10h ; rax = ax << 16 - mov ax, bx ; ax = bx - mov rbx, rax ; ebx = eax - shl rax, 20h ; rax = rax << 32 - or rax, rbx ; eax = ebx - mov rdi, rcx ; rdi = Buffer - mov rcx, rdx ; rcx = Count - shr rcx, 3 ; rcx = rcx / 8 + push rcx # push Buffer + mov rax, r8 # rax = Value + and rax, 0xff # rax = lower 8 bits of r8, upper 56 bits are 0 + mov ah, al # ah = al + mov bx, ax # bx = ax + shl rax, 0x10 # rax = ax << 16 + mov ax, bx # ax = bx + mov rbx, rax # ebx = eax + shl rax, 0x20 # rax = rax << 32 + or rax, rbx # eax = ebx + mov rdi, rcx # rdi = Buffer + mov rcx, rdx # rcx = Count + shr rcx, 3 # rcx = rcx / 8 cld rep stosq - mov rcx, rdx ; rcx = rdx - and rcx, 7 ; rcx = rcx & 7 + mov rcx, rdx # rcx = rdx + and rcx, 7 # rcx = rcx & 7 rep stosb - pop rax ; rax = Buffer + pop rax # rax = Buffer pop rbx pop rdi ret -InternalMemSetMem ENDP - - END -- 2.39.2