diff options
Diffstat (limited to 'ArmPkg')
4 files changed, 151 insertions, 1 deletions
diff --git a/ArmPkg/Library/CompilerIntrinsicsLib/Arm/clzsi2.S b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/clzsi2.S new file mode 100644 index 0000000..9b12731 --- /dev/null +++ b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/clzsi2.S @@ -0,0 +1,57 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2008-2010 Apple Inc. All rights reserved. +# +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +#------------------------------------------------------------------------------ + + .text + .align 2 + .globl ___clzsi2 +___clzsi2: + @ args = 0, pretend = 0, frame = 0 + @ frame_needed = 1, uses_anonymous_args = 0 + stmfd sp!, {r7, lr} + add r7, sp, #0 + movs r3, r0, lsr #16 + movne r3, #16 + moveq r3, #0 + movne r9, #0 + moveq r9, #16 + mov r3, r0, lsr r3 + tst r3, #65280 + movne r0, #8 + moveq r0, #0 + movne lr, #0 + moveq lr, #8 + mov r3, r3, lsr r0 + tst r3, #240 + movne r0, #4 + moveq r0, #0 + movne ip, #0 + moveq ip, #4 + mov r3, r3, lsr r0 + tst r3, #12 + movne r0, #2 + moveq r0, #0 + movne r1, #0 + moveq r1, #2 + mov r2, r3, lsr r0 + add r3, lr, r9 + add r0, r3, ip + add r1, r0, r1 + mov r0, r2, lsr #1 + eor r0, r0, #1 + ands r0, r0, #1 + mvnne r0, #0 + rsb r3, r2, #2 + and r0, r0, r3 + add r0, r1, r0 + ldmfd sp!, {r7, pc} diff --git a/ArmPkg/Library/CompilerIntrinsicsLib/Arm/ctzsi2.S b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/ctzsi2.S new file mode 100644 index 0000000..78f29ec --- /dev/null +++ b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/ctzsi2.S @@ -0,0 +1,51 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2008-2010 Apple Inc. All rights reserved. +# +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +#------------------------------------------------------------------------------ + + .text + .align 2 + .globl ___ctzsi2 +___ctzsi2: + @ args = 0, pretend = 0, frame = 0 + @ frame_needed = 0, uses_anonymous_args = 0 + @ link register save eliminated. + uxth r3, r0 + cmp r3, #0 + moveq ip, #16 + movne ip, #0 + @ lr needed for prologue + mov r0, r0, lsr ip + tst r0, #255 + movne r3, #0 + moveq r3, #8 + mov r0, r0, lsr r3 + tst r0, #15 + movne r1, #0 + moveq r1, #4 + add r3, r3, ip + mov r0, r0, lsr r1 + tst r0, #3 + movne r2, #0 + moveq r2, #2 + add r3, r3, r1 + mov r0, r0, lsr r2 + and r0, r0, #3 + add r2, r3, r2 + eor r3, r0, #1 + mov r0, r0, lsr #1 + ands r3, r3, #1 + mvnne r3, #0 + rsb r0, r0, #2 + and r0, r3, r0 + add r0, r2, r0 + bx lr diff --git a/ArmPkg/Library/CompilerIntrinsicsLib/Arm/ucmpdi2.S b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/ucmpdi2.S new file mode 100644 index 0000000..a6ecc73 --- /dev/null +++ b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/ucmpdi2.S @@ -0,0 +1,39 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2008-2010 Apple Inc. All rights reserved. +# +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +#------------------------------------------------------------------------------ + + .text + .align 2 + .globl ___ucmpdi2 +___ucmpdi2: + @ args = 0, pretend = 0, frame = 0 + @ frame_needed = 0, uses_anonymous_args = 0 + stmfd sp!, {r4, r5, r8, lr} + cmp r1, r3 + mov r8, r0 + mov r4, r2 + mov r5, r3 + bcc L2 + bhi L4 + cmp r0, r2 + bcc L2 + movls r0, #1 + bls L8 + b L4 +L2: + mov r0, #0 + b L8 +L4: + mov r0, #2 +L8: + ldmfd sp!, {r4, r5, r8, pc} diff --git a/ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf b/ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf index b142973..b9c5130 100644 --- a/ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf +++ b/ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf @@ -1,4 +1,4 @@ -#%HEADER% + #/** @file # Base Library implementation. # @@ -79,6 +79,9 @@ # Arm/clzsi2.c | GCC # Arm/ctzsi2.c | GCC # Arm/ucmpdi2.c | GCC + Arm/clzsi2.S | GCC + Arm/ctzsi2.S | GCC + Arm/ucmpdi2.S | GCC Arm/switch8.S | GCC Arm/switchu8.S | GCC Arm/switch16.S | GCC |