]> git.proxmox.com Git - mirror_edk2.git/blob - ArmPkg/Library/BaseMemoryLibVstm/Arm/SetMem.S
Add some ldm/vldm optimized CopyMem routines. Add performance macros to BDS
[mirror_edk2.git] / ArmPkg / Library / BaseMemoryLibVstm / Arm / SetMem.S
1 #------------------------------------------------------------------------------
2 #
3 # SemMem() worker for ARM
4 #
5 # This file started out as C code that did 64 bit moves if the buffer was
6 # 32-bit aligned, else it does a byte copy. It also does a byte copy for
7 # any trailing bytes. Update to use VSTM/VLDM to do 128 byte writes.
8 #
9 # Copyright (c) 2008-2010 Apple Inc. All rights reserved.<BR>
10 # All rights reserved. This program and the accompanying materials
11 # are licensed and made available under the terms and conditions of the BSD License
12 # which accompanies this distribution. The full text of the license may be found at
13 # http://opensource.org/licenses/bsd-license.php
14 #
15 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
16 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
17 #
18 #------------------------------------------------------------------------------
19
20 /**
21 Set Buffer to Value for Size bytes.
22
23 @param Buffer Memory to set.
24 @param Length Number of bytes to set
25 @param Value Value of the set operation.
26
27 @return Buffer
28
29 VOID *
30 EFIAPI
31 InternalMemSetMem (
32 OUT VOID *Buffer,
33 IN UINTN Length,
34 IN UINT8 Value
35 )
36 **/
37
38 .text
39 .align 2
40 .globl ASM_PFX(InternalMemSetMem)
41
42 ASM_PFX(InternalMemSetMem):
43 stmfd sp!, {r4-r7, lr}
44 tst r0, #3
45 movne r3, #0
46 moveq r3, #1
47 cmp r1, #127
48 movls lr, #0
49 andhi lr, r3, #1
50 cmp lr, #0
51 mov r12, r0
52 bne L31
53 L32:
54 mov r3, #0
55 b L43
56 L31:
57 vdup.8 q0,r2
58 vmov q1,q0
59 vmov q2,q0
60 vmov q3,q0
61 vmov q4,q0
62 vmov q5,q0
63 vmov q6,q0
64 vmov q7,q0
65 b L32
66 L34:
67 cmp lr, #0
68 streqb r2, [r12], #1
69 subeq r1, r1, #1
70 beq L43
71 sub r1, r1, #128
72 cmp r1, #127
73 cmp r1, #31
74 movls lr, r3
75 vstm r12!, {d0-d15}
76 L43:
77 cmp r1, #0
78 bne L34
79 ldmfd sp!, {pc}
80