https://bugzilla.tianocore.org/show_bug.cgi?id=1373 Replace BSD 2-Clause License with BSD+Patent License. This change is based on the following emails: https://lists.01.org/pipermail/edk2-devel/2019-February/036260.html https://lists.01.org/pipermail/edk2-devel/2018-October/030385.html RFCs with detailed process for the license change: V3: https://lists.01.org/pipermail/edk2-devel/2019-March/038116.html V2: https://lists.01.org/pipermail/edk2-devel/2019-March/037669.html V1: https://lists.01.org/pipermail/edk2-devel/2019-March/037500.html Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
		
			
				
	
	
		
			91 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			NASM
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			NASM
		
	
	
	
	
	
| ;------------------------------------------------------------------------------
 | |
| ;
 | |
| ; Copyright (c) 2016, Linaro Ltd. All rights reserved.<BR>
 | |
| ;
 | |
| ; SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| ;
 | |
| ;------------------------------------------------------------------------------
 | |
| 
 | |
|     EXPORT  InternalMemZeroMem
 | |
|     EXPORT  InternalMemSetMem
 | |
|     EXPORT  InternalMemSetMem16
 | |
|     EXPORT  InternalMemSetMem32
 | |
|     EXPORT  InternalMemSetMem64
 | |
| 
 | |
|     AREA    SetMem, CODE, READONLY, CODEALIGN, ALIGN=5
 | |
|     THUMB
 | |
| 
 | |
| InternalMemSetMem16
 | |
|     uxth    r2, r2
 | |
|     lsl     r1, r1, #1
 | |
|     orr     r2, r2, r2, lsl #16
 | |
|     b       B0
 | |
| 
 | |
| InternalMemSetMem32
 | |
|     lsl     r1, r1, #2
 | |
|     b       B0
 | |
| 
 | |
| InternalMemSetMem64
 | |
|     lsl     r1, r1, #3
 | |
|     b       B1
 | |
| 
 | |
|     ALIGN   32
 | |
| InternalMemSetMem
 | |
|     uxtb    r2, r2
 | |
|     orr     r2, r2, r2, lsl #8
 | |
|     orr     r2, r2, r2, lsl #16
 | |
|     b       B0
 | |
| 
 | |
| InternalMemZeroMem
 | |
|     movs    r2, #0
 | |
| B0
 | |
|     mov     r3, r2
 | |
| 
 | |
| B1
 | |
|     push    {r4, lr}
 | |
|     cmp     r1, #16                 ; fewer than 16 bytes of input?
 | |
|     add     r1, r1, r0              ; r1 := dst + length
 | |
|     add     lr, r0, #16
 | |
|     blt     L2
 | |
|     bic     lr, lr, #15             ; align output pointer
 | |
| 
 | |
|     str     r2, [r0]                ; potentially unaligned store of 4 bytes
 | |
|     str     r3, [r0, #4]            ; potentially unaligned store of 4 bytes
 | |
|     str     r2, [r0, #8]            ; potentially unaligned store of 4 bytes
 | |
|     str     r3, [r0, #12]           ; potentially unaligned store of 4 bytes
 | |
|     beq     L1
 | |
| 
 | |
| L0
 | |
|     add     lr, lr, #16             ; advance the output pointer by 16 bytes
 | |
|     subs    r4, r1, lr              ; past the output?
 | |
|     blt     L3                      ; break out of the loop
 | |
|     strd    r2, r3, [lr, #-16]      ; aligned store of 16 bytes
 | |
|     strd    r2, r3, [lr, #-8]
 | |
|     bne     L0                      ; goto beginning of loop
 | |
| L1
 | |
|     pop     {r4, pc}
 | |
| 
 | |
| L2
 | |
|     subs    r4, r1, lr
 | |
| L3
 | |
|     adds    r4, r4, #16
 | |
|     subs    r1, r1, #8
 | |
|     cmp     r4, #4                  ; between 4 and 15 bytes?
 | |
|     blt     L4
 | |
|     cmp     r4, #8                  ; between 8 and 15 bytes?
 | |
|     str     r2, [lr, #-16]          ; overlapping store of 4 + (4 + 4) + 4 bytes
 | |
|     itt     gt
 | |
|     strgt   r3, [lr, #-12]
 | |
|     strgt   r2, [r1]
 | |
|     str     r3, [r1, #4]
 | |
|     pop     {r4, pc}
 | |
| 
 | |
| L4
 | |
|     cmp     r4, #2                  ; 2 or 3 bytes?
 | |
|     strb    r2, [lr, #-16]          ; store 1 byte
 | |
|     it      ge
 | |
|     strhge  r2, [r1, #6]            ; store 2 bytes
 | |
|     pop     {r4, pc}
 | |
| 
 | |
|     END
 |