Michael D Kinney 9344f09215 MdePkg: Replace BSD License with BSD+Patent License
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>
2019-04-09 10:58:13 -07:00

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