diff options
Diffstat (limited to 'MdePkg/Library/BaseLib/Arm/Math64.S')
-rwxr-xr-x | MdePkg/Library/BaseLib/Arm/Math64.S | 452 |
1 files changed, 223 insertions, 229 deletions
diff --git a/MdePkg/Library/BaseLib/Arm/Math64.S b/MdePkg/Library/BaseLib/Arm/Math64.S index aec60b2017df..30b4ac42f871 100755 --- a/MdePkg/Library/BaseLib/Arm/Math64.S +++ b/MdePkg/Library/BaseLib/Arm/Math64.S @@ -1,269 +1,263 @@ -#------------------------------------------------------------------------------ +#------------------------------------------------------------------------------ # -# Replacement for Math64.c that is coded to use older GCC intrinsics. +# Replacement for Math64.c that is coded to use older GCC intrinsics. # Doing this reduces the number of intrinsics that are required when -# you port to a new version of gcc. +# you port to a new version of gcc. # # Need to split this into multple files to size optimize the image. # # Copyright (c) 2009 - 2010, Apple Inc. All rights reserved.<BR> -# 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. +# SPDX-License-Identifier: BSD-2-Clause-Patent # #------------------------------------------------------------------------------ - .text - .align 2 - GCC_ASM_EXPORT(InternalMathLShiftU64) + .text + .align 2 + GCC_ASM_EXPORT(InternalMathLShiftU64) ASM_PFX(InternalMathLShiftU64): - stmfd sp!, {r4, r5, r6} - mov r6, r1 - rsb ip, r2, #32 - mov r4, r6, asl r2 - subs r1, r2, #32 - orr r4, r4, r0, lsr ip - mov r3, r0, asl r2 - movpl r4, r0, asl r1 - mov r5, r0 - mov r0, r3 - mov r1, r4 - ldmfd sp!, {r4, r5, r6} - bx lr - - .align 2 - GCC_ASM_EXPORT(InternalMathRShiftU64) + stmfd sp!, {r4, r5, r6} + mov r6, r1 + rsb ip, r2, #32 + mov r4, r6, asl r2 + subs r1, r2, #32 + orr r4, r4, r0, lsr ip + mov r3, r0, asl r2 + movpl r4, r0, asl r1 + mov r5, r0 + mov r0, r3 + mov r1, r4 + ldmfd sp!, {r4, r5, r6} + bx lr + + .align 2 + GCC_ASM_EXPORT(InternalMathRShiftU64) ASM_PFX(InternalMathRShiftU64): - stmfd sp!, {r4, r5, r6} - mov r5, r0 - rsb ip, r2, #32 - mov r3, r5, lsr r2 - subs r0, r2, #32 - orr r3, r3, r1, asl ip - mov r4, r1, lsr r2 - movpl r3, r1, lsr r0 - mov r6, r1 - mov r0, r3 - mov r1, r4 - ldmfd sp!, {r4, r5, r6} - bx lr - - .align 2 - GCC_ASM_EXPORT(InternalMathARShiftU64) + stmfd sp!, {r4, r5, r6} + mov r5, r0 + rsb ip, r2, #32 + mov r3, r5, lsr r2 + subs r0, r2, #32 + orr r3, r3, r1, asl ip + mov r4, r1, lsr r2 + movpl r3, r1, lsr r0 + mov r6, r1 + mov r0, r3 + mov r1, r4 + ldmfd sp!, {r4, r5, r6} + bx lr + + .align 2 + GCC_ASM_EXPORT(InternalMathARShiftU64) ASM_PFX(InternalMathARShiftU64): - stmfd sp!, {r4, r5, r6} - mov r5, r0 - rsb ip, r2, #32 - mov r3, r5, lsr r2 - subs r0, r2, #32 - orr r3, r3, r1, asl ip - mov r4, r1, asr r2 - movpl r3, r1, asr r0 - mov r6, r1 - mov r0, r3 - mov r1, r4 - ldmfd sp!, {r4, r5, r6} - bx lr - - .align 2 - GCC_ASM_EXPORT(InternalMathLRotU64) + stmfd sp!, {r4, r5, r6} + mov r5, r0 + rsb ip, r2, #32 + mov r3, r5, lsr r2 + subs r0, r2, #32 + orr r3, r3, r1, asl ip + mov r4, r1, asr r2 + movpl r3, r1, asr r0 + mov r6, r1 + mov r0, r3 + mov r1, r4 + ldmfd sp!, {r4, r5, r6} + bx lr + + .align 2 + GCC_ASM_EXPORT(InternalMathLRotU64) ASM_PFX(InternalMathLRotU64): - stmfd sp!, {r4, r5, r6, r7, lr} - add r7, sp, #12 - mov r6, r1 - rsb ip, r2, #32 - mov r4, r6, asl r2 - rsb lr, r2, #64 - subs r1, r2, #32 - orr r4, r4, r0, lsr ip - mov r3, r0, asl r2 - movpl r4, r0, asl r1 - sub ip, r2, #32 - mov r5, r0 - mov r0, r0, lsr lr - rsbs r2, r2, #32 - orr r0, r0, r6, asl ip - mov r1, r6, lsr lr - movpl r0, r6, lsr r2 - orr r1, r1, r4 - orr r0, r0, r3 - ldmfd sp!, {r4, r5, r6, r7, pc} - - - .align 2 - GCC_ASM_EXPORT(InternalMathRRotU64) + stmfd sp!, {r4, r5, r6, r7, lr} + add r7, sp, #12 + mov r6, r1 + rsb ip, r2, #32 + mov r4, r6, asl r2 + rsb lr, r2, #64 + subs r1, r2, #32 + orr r4, r4, r0, lsr ip + mov r3, r0, asl r2 + movpl r4, r0, asl r1 + sub ip, r2, #32 + mov r5, r0 + mov r0, r0, lsr lr + rsbs r2, r2, #32 + orr r0, r0, r6, asl ip + mov r1, r6, lsr lr + movpl r0, r6, lsr r2 + orr r1, r1, r4 + orr r0, r0, r3 + ldmfd sp!, {r4, r5, r6, r7, pc} + + + .align 2 + GCC_ASM_EXPORT(InternalMathRRotU64) ASM_PFX(InternalMathRRotU64): - stmfd sp!, {r4, r5, r6, r7, lr} - add r7, sp, #12 - mov r5, r0 - rsb ip, r2, #32 - mov r3, r5, lsr r2 - rsb lr, r2, #64 - subs r0, r2, #32 - orr r3, r3, r1, asl ip - mov r4, r1, lsr r2 - movpl r3, r1, lsr r0 - sub ip, r2, #32 - mov r6, r1 - mov r1, r1, asl lr - rsbs r2, r2, #32 - orr r1, r1, r5, lsr ip - mov r0, r5, asl lr - movpl r1, r5, asl r2 - orr r0, r0, r3 - orr r1, r1, r4 - ldmfd sp!, {r4, r5, r6, r7, pc} - - .align 2 - GCC_ASM_EXPORT(InternalMathMultU64x32) + stmfd sp!, {r4, r5, r6, r7, lr} + add r7, sp, #12 + mov r5, r0 + rsb ip, r2, #32 + mov r3, r5, lsr r2 + rsb lr, r2, #64 + subs r0, r2, #32 + orr r3, r3, r1, asl ip + mov r4, r1, lsr r2 + movpl r3, r1, lsr r0 + sub ip, r2, #32 + mov r6, r1 + mov r1, r1, asl lr + rsbs r2, r2, #32 + orr r1, r1, r5, lsr ip + mov r0, r5, asl lr + movpl r1, r5, asl r2 + orr r0, r0, r3 + orr r1, r1, r4 + ldmfd sp!, {r4, r5, r6, r7, pc} + + .align 2 + GCC_ASM_EXPORT(InternalMathMultU64x32) ASM_PFX(InternalMathMultU64x32): - stmfd sp!, {r7, lr} - add r7, sp, #0 - mov r3, #0 - mov ip, r0 - mov lr, r1 - umull r0, r1, ip, r2 - mla r1, lr, r2, r1 - mla r1, ip, r3, r1 - ldmfd sp!, {r7, pc} - - .align 2 - GCC_ASM_EXPORT(InternalMathMultU64x64) + stmfd sp!, {r7, lr} + add r7, sp, #0 + mov r3, #0 + mov ip, r0 + mov lr, r1 + umull r0, r1, ip, r2 + mla r1, lr, r2, r1 + mla r1, ip, r3, r1 + ldmfd sp!, {r7, pc} + + .align 2 + GCC_ASM_EXPORT(InternalMathMultU64x64) ASM_PFX(InternalMathMultU64x64): - stmfd sp!, {r7, lr} - add r7, sp, #0 - mov ip, r0 - mov lr, r1 - umull r0, r1, ip, r2 - mla r1, lr, r2, r1 - mla r1, ip, r3, r1 - ldmfd sp!, {r7, pc} - - .align 2 - GCC_ASM_EXPORT(InternalMathDivU64x32) + stmfd sp!, {r7, lr} + add r7, sp, #0 + mov ip, r0 + mov lr, r1 + umull r0, r1, ip, r2 + mla r1, lr, r2, r1 + mla r1, ip, r3, r1 + ldmfd sp!, {r7, pc} + + .align 2 + GCC_ASM_EXPORT(InternalMathDivU64x32) ASM_PFX(InternalMathDivU64x32): - stmfd sp!, {r7, lr} - add r7, sp, #0 - mov r3, #0 - bl ASM_PFX(__udivdi3) - ldmfd sp!, {r7, pc} - - - .align 2 - GCC_ASM_EXPORT(InternalMathModU64x32) + stmfd sp!, {r7, lr} + add r7, sp, #0 + mov r3, #0 + bl ASM_PFX(__udivdi3) + ldmfd sp!, {r7, pc} + + + .align 2 + GCC_ASM_EXPORT(InternalMathModU64x32) ASM_PFX(InternalMathModU64x32): - stmfd sp!, {r7, lr} - add r7, sp, #0 - mov r3, #0 - bl ASM_PFX(__umoddi3) - ldmfd sp!, {r7, pc} - - - .align 2 - GCC_ASM_EXPORT(InternalMathDivRemU64x32) + stmfd sp!, {r7, lr} + add r7, sp, #0 + mov r3, #0 + bl ASM_PFX(__umoddi3) + ldmfd sp!, {r7, pc} + + + .align 2 + GCC_ASM_EXPORT(InternalMathDivRemU64x32) ASM_PFX(InternalMathDivRemU64x32): - stmfd sp!, {r4, r5, r6, r7, lr} - add r7, sp, #12 - stmfd sp!, {r10, r11} - subs r6, r3, #0 - mov r10, r0 - mov r11, r1 - moveq r4, r2 - moveq r5, #0 - beq L22 - mov r4, r2 - mov r5, #0 - mov r3, #0 - bl ASM_PFX(__umoddi3) - str r0, [r6, #0] + stmfd sp!, {r4, r5, r6, r7, lr} + add r7, sp, #12 + stmfd sp!, {r10, r11} + subs r6, r3, #0 + mov r10, r0 + mov r11, r1 + moveq r4, r2 + moveq r5, #0 + beq L22 + mov r4, r2 + mov r5, #0 + mov r3, #0 + bl ASM_PFX(__umoddi3) + str r0, [r6, #0] L22: - mov r0, r10 - mov r1, r11 - mov r2, r4 - mov r3, r5 - bl ASM_PFX(__udivdi3) - ldmfd sp!, {r10, r11} - ldmfd sp!, {r4, r5, r6, r7, pc} - - - .align 2 - GCC_ASM_EXPORT(InternalMathDivRemU64x64) + mov r0, r10 + mov r1, r11 + mov r2, r4 + mov r3, r5 + bl ASM_PFX(__udivdi3) + ldmfd sp!, {r10, r11} + ldmfd sp!, {r4, r5, r6, r7, pc} + + + .align 2 + GCC_ASM_EXPORT(InternalMathDivRemU64x64) ASM_PFX(InternalMathDivRemU64x64): - stmfd sp!, {r4, r5, r6, r7, lr} - add r7, sp, #12 - stmfd sp!, {r10, r11} - ldr r6, [sp, #28] - mov r4, r0 - cmp r6, #0 - mov r5, r1 - mov r10, r2 - mov r11, r3 - beq L26 - bl ASM_PFX(__umoddi3) - stmia r6, {r0-r1} + stmfd sp!, {r4, r5, r6, r7, lr} + add r7, sp, #12 + stmfd sp!, {r10, r11} + ldr r6, [sp, #28] + mov r4, r0 + cmp r6, #0 + mov r5, r1 + mov r10, r2 + mov r11, r3 + beq L26 + bl ASM_PFX(__umoddi3) + stmia r6, {r0-r1} L26: - mov r0, r4 - mov r1, r5 - mov r2, r10 - mov r3, r11 - bl ASM_PFX(__udivdi3) - ldmfd sp!, {r10, r11} - ldmfd sp!, {r4, r5, r6, r7, pc} - - - .align 2 - GCC_ASM_EXPORT(InternalMathDivRemS64x64) + mov r0, r4 + mov r1, r5 + mov r2, r10 + mov r3, r11 + bl ASM_PFX(__udivdi3) + ldmfd sp!, {r10, r11} + ldmfd sp!, {r4, r5, r6, r7, pc} + + + .align 2 + GCC_ASM_EXPORT(InternalMathDivRemS64x64) ASM_PFX(InternalMathDivRemS64x64): - stmfd sp!, {r4, r5, r6, r7, lr} - add r7, sp, #12 - stmfd sp!, {r10, r11} - ldr r6, [sp, #28] - mov r4, r0 - cmp r6, #0 - mov r5, r1 - mov r10, r2 - mov r11, r3 - beq L30 - bl ASM_PFX(__moddi3) - stmia r6, {r0-r1} + stmfd sp!, {r4, r5, r6, r7, lr} + add r7, sp, #12 + stmfd sp!, {r10, r11} + ldr r6, [sp, #28] + mov r4, r0 + cmp r6, #0 + mov r5, r1 + mov r10, r2 + mov r11, r3 + beq L30 + bl ASM_PFX(__moddi3) + stmia r6, {r0-r1} L30: - mov r0, r4 - mov r1, r5 - mov r2, r10 - mov r3, r11 - bl ASM_PFX(__divdi3) - ldmfd sp!, {r10, r11} - ldmfd sp!, {r4, r5, r6, r7, pc} - - - .align 2 - GCC_ASM_EXPORT(InternalMathSwapBytes64) + mov r0, r4 + mov r1, r5 + mov r2, r10 + mov r3, r11 + bl ASM_PFX(__divdi3) + ldmfd sp!, {r10, r11} + ldmfd sp!, {r4, r5, r6, r7, pc} + + + .align 2 + GCC_ASM_EXPORT(InternalMathSwapBytes64) ASM_PFX(InternalMathSwapBytes64): - stmfd sp!, {r4, r5, r7, lr} - mov r5, r1 - bl ASM_PFX(SwapBytes32) - mov r4, r0 - mov r0, r5 - bl ASM_PFX(SwapBytes32) - mov r1, r4 - ldmfd sp!, {r4, r5, r7, pc} + stmfd sp!, {r4, r5, r7, lr} + mov r5, r1 + bl ASM_PFX(SwapBytes32) + mov r4, r0 + mov r0, r5 + bl ASM_PFX(SwapBytes32) + mov r1, r4 + ldmfd sp!, {r4, r5, r7, pc} -ASM_FUNCTION_REMOVE_IF_UNREFERENCED
\ No newline at end of file +ASM_FUNCTION_REMOVE_IF_UNREFERENCED |