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
 |