From d8095b36abc521970dd930449a8ae8ddc431314c Mon Sep 17 00:00:00 2001 From: Jeff Brasen Date: Tue, 30 Jan 2024 15:05:08 -0800 Subject: ArmPkg/CompilerIntrinsicsLib: provide __ashlti3 The compiler will use this function if it is left shifting a 128 bit value. Seen when updating OpenSSL. Signed-off-by: Jeff Brasen --- .../CompilerIntrinsicsLib/AArch64/ashlti3.S | 33 ++++++++++++++++++++++ .../CompilerIntrinsicsLib.inf | 1 + 2 files changed, 34 insertions(+) create mode 100644 ArmPkg/Library/CompilerIntrinsicsLib/AArch64/ashlti3.S (limited to 'ArmPkg') diff --git a/ArmPkg/Library/CompilerIntrinsicsLib/AArch64/ashlti3.S b/ArmPkg/Library/CompilerIntrinsicsLib/AArch64/ashlti3.S new file mode 100644 index 0000000000..79a7b3514c --- /dev/null +++ b/ArmPkg/Library/CompilerIntrinsicsLib/AArch64/ashlti3.S @@ -0,0 +1,33 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +#------------------------------------------------------------------------------ + +#include + +ASM_FUNC(__ashlti3) + # return if shift is 0 + cbz x2, 1f + + mov x3, #64 + sub x3, x3, x2 + cmp x3, #0 + b.le 2f + + # shift is <= 64 bits + lsr x3, x0, x3 + lsl x1, x1, x2 + orr x1, x1, x3 + lsl x0, x0, x2 +1: + ret + +2: + # shift is > 64 + neg w3, w3 + lsl x1, x0, x3 + mov x0, #0 + ret diff --git a/ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf b/ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf index 7e22e6f67b..054e681307 100644 --- a/ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf +++ b/ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf @@ -66,6 +66,7 @@ [Sources.AARCH64] AArch64/Atomics.S | GCC + AArch64/ashlti3.S | GCC [Packages] MdePkg/MdePkg.dec -- cgit v1.2.3