1 /*++
2 
3 Copyright (c) 2007, 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.c
15 
16 Abstract:
17 
18   This is the code that uses rep stosd SetMem service
19 
20 --*/
21 
22 #include "Tiano.h"
23 
24 VOID
EfiCommonLibSetMem(IN VOID * Buffer,IN UINTN Count,IN UINT8 Value)25 EfiCommonLibSetMem (
26   IN VOID   *Buffer,
27   IN UINTN  Count,
28   IN UINT8  Value
29   )
30 /*++
31 
32 Input:  VOID   *Buffer - Pointer to buffer to write
33         UINTN  Count   - Number of bytes to write
34         UINT8  Value   - Value to write
35 
36 Output: None.
37 
38 Saves:
39 
40 Modifies:
41 
42 Description:  This function uses rep stosd to set memory.
43 
44 --*/
45 {
46   __asm {
47     mov         ecx, Count
48     test        ecx, ecx
49     je          Exit
50     mov         al,  Value
51     mov         ah,  al
52     shrd        edx, eax, 16
53     shld        eax, edx, 16
54     mov         edx, ecx
55     mov         edi, Buffer
56     shr         ecx, 2
57     rep stosd
58     mov         ecx, edx
59     and         ecx, 3
60     rep stosb
61 Exit:
62   }
63 }
64 
65