1#------------------------------------------------------------------------------
2#
3# Copyright (c) 2008, Intel Corporation. All rights reserved.<BR>
4# This program and the accompanying materials
5# are licensed and made available under the terms and conditions of the BSD License
6# which accompanies this distribution.  The full text of the license may be found at
7# http://opensource.org/licenses/bsd-license.php
8#
9# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11#
12# Module Name:
13#
14#   EfiSetMemRep4.S
15#
16# Abstract:
17#
18#   SetMem function
19#
20# Notes:
21#
22#------------------------------------------------------------------------------
23#include <EfiBind.h>
24
25    .code:
26
27.globl ASM_PFX(EfiCommonLibCopyMem)
28
29#------------------------------------------------------------------------------
30# VOID
31# EfiCommonLibSetMem (
32#   OUT     VOID                      *Buffer,
33#   IN      UINTN                     Size,
34#   IN      UINT8                     Value
35#   );
36#------------------------------------------------------------------------------
37ASM_PFX(EfiCommonLibSetMem):
38      push   %rdi
39      cmp    $0x0,%rdx
40      je     SetDone
41      mov    %rcx,%rdi
42      mov    %r8b,%al
43      mov    %al,%ah
44      shrd   $0x10,%eax,%ecx
45      shld   $0x10,%ecx,%eax
46      mov    %rdx,%rcx
47      shr    $0x2,%rcx
48      rep stos %eax,%es:(%rdi)
49      mov    %rdx,%rcx
50      and    $0x3,%rcx
51      rep stos %al,%es:(%rdi)
52SetDone:
53      pop    %rdi
54      retq
55