Add some missing 64-bit math functions for gcc
authorAJFISH <AJFISH@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 12 Jan 2010 18:23:25 +0000 (18:23 +0000)
committerAJFISH <AJFISH@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 12 Jan 2010 18:23:25 +0000 (18:23 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9715 6f19259b-4bc3-4df7-8a09-765794883524

ArmPkg/Library/CompilerIntrinsicsLib/Arm/clzsi2.S [new file with mode: 0644]
ArmPkg/Library/CompilerIntrinsicsLib/Arm/ctzsi2.S [new file with mode: 0644]
ArmPkg/Library/CompilerIntrinsicsLib/Arm/ucmpdi2.S [new file with mode: 0644]
ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf

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}
diff --git a/ArmPkg/Library/CompilerIntrinsicsLib/Arm/ctzsi2.S b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/ctzsi2.S
new file mode 100644 (file)
index 0000000..78f29ec
--- /dev/null
@@ -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 (file)
index 0000000..a6ecc73
--- /dev/null
@@ -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}
index b1429737c716545c85be51cb9c4f93528c19c67c..b9c5130d50a15a6d52bcad4474c8964128379efd 100644 (file)
@@ -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