]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmPkg/Library/CompilerIntrinsicsLib/Arm/clzsi2.S
Add some missing 64-bit math functions for gcc
[mirror_edk2.git] / ArmPkg / Library / CompilerIntrinsicsLib / Arm / clzsi2.S
diff --git a/ArmPkg/Library/CompilerIntrinsicsLib/Arm/clzsi2.S b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/clzsi2.S
new file mode 100644 (file)
index 0000000..9b12731
--- /dev/null
@@ -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}