-//------------------------------------------------------------------------------
-//
-// Copyright (c) 2008 - 2009, 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.
-//
-//------------------------------------------------------------------------------
-
-
-
- .text
- .align 2
- GCC_ASM_EXPORT(__aeabi_uldivmod)
-
-//
-//UINT64
-//EFIAPI
-//__aeabi_uldivmod (
-// IN UINT64 Dividend
-// IN UINT64 Divisor
-// )
-//
-ASM_PFX(__aeabi_uldivmod):
- stmdb sp!, {r4, r5, r6, lr}
- mov r4, r1
- mov r5, r0
- mov r6, #0 // 0x0
- orrs ip, r3, r2, lsr #31
- bne ASM_PFX(__aeabi_uldivmod_label1)
- tst r2, r2
- beq ASM_PFX(_ll_div0)
- movs ip, r2, lsr #15
- addeq r6, r6, #16 // 0x10
- mov ip, r2, lsl r6
- movs lr, ip, lsr #23
- moveq ip, ip, lsl #8
- addeq r6, r6, #8 // 0x8
- movs lr, ip, lsr #27
- moveq ip, ip, lsl #4
- addeq r6, r6, #4 // 0x4
- movs lr, ip, lsr #29
- moveq ip, ip, lsl #2
- addeq r6, r6, #2 // 0x2
- movs lr, ip, lsr #30
- moveq ip, ip, lsl #1
- addeq r6, r6, #1 // 0x1
- b ASM_PFX(_ll_udiv_small)
-ASM_PFX(__aeabi_uldivmod_label1):
- tst r3, #-2147483648 // 0x80000000
- bne ASM_PFX(__aeabi_uldivmod_label2)
- movs ip, r3, lsr #15
- addeq r6, r6, #16 // 0x10
- mov ip, r3, lsl r6
- movs lr, ip, lsr #23
- moveq ip, ip, lsl #8
- addeq r6, r6, #8 // 0x8
- movs lr, ip, lsr #27
- moveq ip, ip, lsl #4
- addeq r6, r6, #4 // 0x4
- movs lr, ip, lsr #29
- moveq ip, ip, lsl #2
- addeq r6, r6, #2 // 0x2
- movs lr, ip, lsr #30
- addeq r6, r6, #1 // 0x1
- rsb r3, r6, #32 // 0x20
- moveq ip, ip, lsl #1
- orr ip, ip, r2, lsr r3
- mov lr, r2, lsl r6
- b ASM_PFX(_ll_udiv_big)
-ASM_PFX(__aeabi_uldivmod_label2):
- mov ip, r3
- mov lr, r2
- b ASM_PFX(_ll_udiv_ginormous)
-
-ASM_PFX(_ll_udiv_small):
- cmp r4, ip, lsl #1
- mov r3, #0 // 0x0
- subcs r4, r4, ip, lsl #1
- addcs r3, r3, #2 // 0x2
- cmp r4, ip
- subcs r4, r4, ip
- adcs r3, r3, #0 // 0x0
- add r2, r6, #32 // 0x20
- cmp r2, #32 // 0x20
- rsb ip, ip, #0 // 0x0
- bcc ASM_PFX(_ll_udiv_small_label1)
- orrs r0, r4, r5, lsr #30
- moveq r4, r5
- moveq r5, #0 // 0x0
- subeq r2, r2, #32 // 0x20
-ASM_PFX(_ll_udiv_small_label1):
- mov r1, #0 // 0x0
- cmp r2, #16 // 0x10
- bcc ASM_PFX(_ll_udiv_small_label2)
- movs r0, r4, lsr #14
- moveq r4, r4, lsl #16
- addeq r1, r1, #16 // 0x10
-ASM_PFX(_ll_udiv_small_label2):
- sub lr, r2, r1
- cmp lr, #8 // 0x8
- bcc ASM_PFX(_ll_udiv_small_label3)
- movs r0, r4, lsr #22
- moveq r4, r4, lsl #8
- addeq r1, r1, #8 // 0x8
-ASM_PFX(_ll_udiv_small_label3):
- rsb r0, r1, #32 // 0x20
- sub r2, r2, r1
- orr r4, r4, r5, lsr r0
- mov r5, r5, lsl r1
- cmp r2, #1 // 0x1
- bcc ASM_PFX(_ll_udiv_small_label5)
- sub r2, r2, #1 // 0x1
- and r0, r2, #7 // 0x7
- eor r0, r0, #7 // 0x7
- adds r0, r0, r0, lsl #1
- add pc, pc, r0, lsl #2
- nop // (mov r0,r0)
-ASM_PFX(_ll_udiv_small_label4):
- adcs r5, r5, r5
- adcs r4, ip, r4, lsl #1
- rsbcc r4, ip, r4
- adcs r5, r5, r5
- adcs r4, ip, r4, lsl #1
- rsbcc r4, ip, r4
- adcs r5, r5, r5
- adcs r4, ip, r4, lsl #1
- rsbcc r4, ip, r4
- adcs r5, r5, r5
- adcs r4, ip, r4, lsl #1
- rsbcc r4, ip, r4
- adcs r5, r5, r5
- adcs r4, ip, r4, lsl #1
- rsbcc r4, ip, r4
- adcs r5, r5, r5
- adcs r4, ip, r4, lsl #1
- rsbcc r4, ip, r4
- adcs r5, r5, r5
- adcs r4, ip, r4, lsl #1
- rsbcc r4, ip, r4
- adcs r5, r5, r5
- adcs r4, ip, r4, lsl #1
- sub r2, r2, #8 // 0x8
- tst r2, r2
- rsbcc r4, ip, r4
- bpl ASM_PFX(_ll_udiv_small_label4)
-ASM_PFX(_ll_udiv_small_label5):
- mov r2, r4, lsr r6
- bic r4, r4, r2, lsl r6
- adcs r0, r5, r5
- adc r1, r4, r4
- add r1, r1, r3, lsl r6
- mov r3, #0 // 0x0
- ldmia sp!, {r4, r5, r6, pc}
-
-ASM_PFX(_ll_udiv_big):
- subs r0, r5, lr
- mov r3, #0 // 0x0
- sbcs r1, r4, ip
- movcs r5, r0
- movcs r4, r1
- adcs r3, r3, #0 // 0x0
- subs r0, r5, lr
- sbcs r1, r4, ip
- movcs r5, r0
- movcs r4, r1
- adcs r3, r3, #0 // 0x0
- subs r0, r5, lr
- sbcs r1, r4, ip
- movcs r5, r0
- movcs r4, r1
- adcs r3, r3, #0 // 0x0
- mov r1, #0 // 0x0
- rsbs lr, lr, #0 // 0x0
- rsc ip, ip, #0 // 0x0
- cmp r6, #16 // 0x10
- bcc ASM_PFX(_ll_udiv_big_label1)
- movs r0, r4, lsr #14
- moveq r4, r4, lsl #16
- addeq r1, r1, #16 // 0x10
-ASM_PFX(_ll_udiv_big_label1):
- sub r2, r6, r1
- cmp r2, #8 // 0x8
- bcc ASM_PFX(_ll_udiv_big_label2)
- movs r0, r4, lsr #22
- moveq r4, r4, lsl #8
- addeq r1, r1, #8 // 0x8
-ASM_PFX(_ll_udiv_big_label2):
- rsb r0, r1, #32 // 0x20
- sub r2, r6, r1
- orr r4, r4, r5, lsr r0
- mov r5, r5, lsl r1
- cmp r2, #1 // 0x1
- bcc ASM_PFX(_ll_udiv_big_label4)
- sub r2, r2, #1 // 0x1
- and r0, r2, #3 // 0x3
- rsb r0, r0, #3 // 0x3
- adds r0, r0, r0, lsl #1
- add pc, pc, r0, lsl #3
- nop // (mov r0,r0)
-ASM_PFX(_ll_udiv_big_label3):
- adcs r5, r5, r5
- adcs r4, r4, r4
- adcs r0, lr, r5
- adcs r1, ip, r4
- movcs r5, r0
- movcs r4, r1
- adcs r5, r5, r5
- adcs r4, r4, r4
- adcs r0, lr, r5
- adcs r1, ip, r4
- movcs r5, r0
- movcs r4, r1
- adcs r5, r5, r5
- adcs r4, r4, r4
- adcs r0, lr, r5
- adcs r1, ip, r4
- movcs r5, r0
- movcs r4, r1
- sub r2, r2, #4 // 0x4
- adcs r5, r5, r5
- adcs r4, r4, r4
- adcs r0, lr, r5
- adcs r1, ip, r4
- tst r2, r2
- movcs r5, r0
- movcs r4, r1
- bpl ASM_PFX(_ll_udiv_big_label3)
-ASM_PFX(_ll_udiv_big_label4):
- mov r1, #0 // 0x0
- mov r2, r5, lsr r6
- bic r5, r5, r2, lsl r6
- adcs r0, r5, r5
- adc r1, r1, #0 // 0x0
- movs lr, r3, lsl r6
- mov r3, r4, lsr r6
- bic r4, r4, r3, lsl r6
- adc r1, r1, #0 // 0x0
- adds r0, r0, lr
- orr r2, r2, r4, ror r6
- adc r1, r1, #0 // 0x0
- ldmia sp!, {r4, r5, r6, pc}
-
-ASM_PFX(_ll_udiv_ginormous):
- subs r2, r5, lr
- mov r1, #0 // 0x0
- sbcs r3, r4, ip
- adc r0, r1, r1
- movcc r2, r5
- movcc r3, r4
- ldmia sp!, {r4, r5, r6, pc}
-
-ASM_PFX(_ll_div0):
- ldmia sp!, {r4, r5, r6, lr}
- mov r0, #0 // 0x0
- mov r1, #0 // 0x0
- b ASM_PFX(__aeabi_ldiv0)
-
-ASM_PFX(__aeabi_ldiv0):
- bx r14
-
-
+//------------------------------------------------------------------------------\r
+//\r
+// Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
+//\r
+// This program and the accompanying materials\r
+// are licensed and made available under the terms and conditions of the BSD License\r
+// which accompanies this distribution. The full text of the license may be found at\r
+// http://opensource.org/licenses/bsd-license.php\r
+//\r
+// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+//\r
+//------------------------------------------------------------------------------\r
+\r
+\r
+\r
+ .text\r
+ .align 2\r
+ GCC_ASM_EXPORT(__aeabi_uldivmod)\r
+\r
+//\r
+//UINT64\r
+//EFIAPI\r
+//__aeabi_uldivmod (\r
+// IN UINT64 Dividend\r
+// IN UINT64 Divisor\r
+// )\r
+//\r
+ASM_PFX(__aeabi_uldivmod):\r
+ stmdb sp!, {r4, r5, r6, lr}\r
+ mov r4, r1\r
+ mov r5, r0\r
+ mov r6, #0 // 0x0\r
+ orrs ip, r3, r2, lsr #31\r
+ bne ASM_PFX(__aeabi_uldivmod_label1)\r
+ tst r2, r2\r
+ beq ASM_PFX(_ll_div0)\r
+ movs ip, r2, lsr #15\r
+ addeq r6, r6, #16 // 0x10\r
+ mov ip, r2, lsl r6\r
+ movs lr, ip, lsr #23\r
+ moveq ip, ip, lsl #8\r
+ addeq r6, r6, #8 // 0x8\r
+ movs lr, ip, lsr #27\r
+ moveq ip, ip, lsl #4\r
+ addeq r6, r6, #4 // 0x4\r
+ movs lr, ip, lsr #29\r
+ moveq ip, ip, lsl #2\r
+ addeq r6, r6, #2 // 0x2\r
+ movs lr, ip, lsr #30\r
+ moveq ip, ip, lsl #1\r
+ addeq r6, r6, #1 // 0x1\r
+ b ASM_PFX(_ll_udiv_small)\r
+ASM_PFX(__aeabi_uldivmod_label1):\r
+ tst r3, #-2147483648 // 0x80000000\r
+ bne ASM_PFX(__aeabi_uldivmod_label2)\r
+ movs ip, r3, lsr #15\r
+ addeq r6, r6, #16 // 0x10\r
+ mov ip, r3, lsl r6\r
+ movs lr, ip, lsr #23\r
+ moveq ip, ip, lsl #8\r
+ addeq r6, r6, #8 // 0x8\r
+ movs lr, ip, lsr #27\r
+ moveq ip, ip, lsl #4\r
+ addeq r6, r6, #4 // 0x4\r
+ movs lr, ip, lsr #29\r
+ moveq ip, ip, lsl #2\r
+ addeq r6, r6, #2 // 0x2\r
+ movs lr, ip, lsr #30\r
+ addeq r6, r6, #1 // 0x1\r
+ rsb r3, r6, #32 // 0x20\r
+ moveq ip, ip, lsl #1\r
+ orr ip, ip, r2, lsr r3\r
+ mov lr, r2, lsl r6\r
+ b ASM_PFX(_ll_udiv_big)\r
+ASM_PFX(__aeabi_uldivmod_label2):\r
+ mov ip, r3\r
+ mov lr, r2\r
+ b ASM_PFX(_ll_udiv_ginormous)\r
+\r
+ASM_PFX(_ll_udiv_small):\r
+ cmp r4, ip, lsl #1\r
+ mov r3, #0 // 0x0\r
+ subcs r4, r4, ip, lsl #1\r
+ addcs r3, r3, #2 // 0x2\r
+ cmp r4, ip\r
+ subcs r4, r4, ip\r
+ adcs r3, r3, #0 // 0x0\r
+ add r2, r6, #32 // 0x20\r
+ cmp r2, #32 // 0x20\r
+ rsb ip, ip, #0 // 0x0\r
+ bcc ASM_PFX(_ll_udiv_small_label1)\r
+ orrs r0, r4, r5, lsr #30\r
+ moveq r4, r5\r
+ moveq r5, #0 // 0x0\r
+ subeq r2, r2, #32 // 0x20\r
+ASM_PFX(_ll_udiv_small_label1):\r
+ mov r1, #0 // 0x0\r
+ cmp r2, #16 // 0x10\r
+ bcc ASM_PFX(_ll_udiv_small_label2)\r
+ movs r0, r4, lsr #14\r
+ moveq r4, r4, lsl #16\r
+ addeq r1, r1, #16 // 0x10\r
+ASM_PFX(_ll_udiv_small_label2):\r
+ sub lr, r2, r1\r
+ cmp lr, #8 // 0x8\r
+ bcc ASM_PFX(_ll_udiv_small_label3)\r
+ movs r0, r4, lsr #22\r
+ moveq r4, r4, lsl #8\r
+ addeq r1, r1, #8 // 0x8\r
+ASM_PFX(_ll_udiv_small_label3):\r
+ rsb r0, r1, #32 // 0x20\r
+ sub r2, r2, r1\r
+ orr r4, r4, r5, lsr r0\r
+ mov r5, r5, lsl r1\r
+ cmp r2, #1 // 0x1\r
+ bcc ASM_PFX(_ll_udiv_small_label5)\r
+ sub r2, r2, #1 // 0x1\r
+ and r0, r2, #7 // 0x7\r
+ eor r0, r0, #7 // 0x7\r
+ adds r0, r0, r0, lsl #1\r
+ add pc, pc, r0, lsl #2\r
+ nop // (mov r0,r0)\r
+ASM_PFX(_ll_udiv_small_label4):\r
+ adcs r5, r5, r5\r
+ adcs r4, ip, r4, lsl #1\r
+ rsbcc r4, ip, r4\r
+ adcs r5, r5, r5\r
+ adcs r4, ip, r4, lsl #1\r
+ rsbcc r4, ip, r4\r
+ adcs r5, r5, r5\r
+ adcs r4, ip, r4, lsl #1\r
+ rsbcc r4, ip, r4\r
+ adcs r5, r5, r5\r
+ adcs r4, ip, r4, lsl #1\r
+ rsbcc r4, ip, r4\r
+ adcs r5, r5, r5\r
+ adcs r4, ip, r4, lsl #1\r
+ rsbcc r4, ip, r4\r
+ adcs r5, r5, r5\r
+ adcs r4, ip, r4, lsl #1\r
+ rsbcc r4, ip, r4\r
+ adcs r5, r5, r5\r
+ adcs r4, ip, r4, lsl #1\r
+ rsbcc r4, ip, r4\r
+ adcs r5, r5, r5\r
+ adcs r4, ip, r4, lsl #1\r
+ sub r2, r2, #8 // 0x8\r
+ tst r2, r2\r
+ rsbcc r4, ip, r4\r
+ bpl ASM_PFX(_ll_udiv_small_label4)\r
+ASM_PFX(_ll_udiv_small_label5):\r
+ mov r2, r4, lsr r6\r
+ bic r4, r4, r2, lsl r6\r
+ adcs r0, r5, r5\r
+ adc r1, r4, r4\r
+ add r1, r1, r3, lsl r6\r
+ mov r3, #0 // 0x0\r
+ ldmia sp!, {r4, r5, r6, pc}\r
+\r
+ASM_PFX(_ll_udiv_big):\r
+ subs r0, r5, lr\r
+ mov r3, #0 // 0x0\r
+ sbcs r1, r4, ip\r
+ movcs r5, r0\r
+ movcs r4, r1\r
+ adcs r3, r3, #0 // 0x0\r
+ subs r0, r5, lr\r
+ sbcs r1, r4, ip\r
+ movcs r5, r0\r
+ movcs r4, r1\r
+ adcs r3, r3, #0 // 0x0\r
+ subs r0, r5, lr\r
+ sbcs r1, r4, ip\r
+ movcs r5, r0\r
+ movcs r4, r1\r
+ adcs r3, r3, #0 // 0x0\r
+ mov r1, #0 // 0x0\r
+ rsbs lr, lr, #0 // 0x0\r
+ rsc ip, ip, #0 // 0x0\r
+ cmp r6, #16 // 0x10\r
+ bcc ASM_PFX(_ll_udiv_big_label1)\r
+ movs r0, r4, lsr #14\r
+ moveq r4, r4, lsl #16\r
+ addeq r1, r1, #16 // 0x10\r
+ASM_PFX(_ll_udiv_big_label1):\r
+ sub r2, r6, r1\r
+ cmp r2, #8 // 0x8\r
+ bcc ASM_PFX(_ll_udiv_big_label2)\r
+ movs r0, r4, lsr #22\r
+ moveq r4, r4, lsl #8\r
+ addeq r1, r1, #8 // 0x8\r
+ASM_PFX(_ll_udiv_big_label2):\r
+ rsb r0, r1, #32 // 0x20\r
+ sub r2, r6, r1\r
+ orr r4, r4, r5, lsr r0\r
+ mov r5, r5, lsl r1\r
+ cmp r2, #1 // 0x1\r
+ bcc ASM_PFX(_ll_udiv_big_label4)\r
+ sub r2, r2, #1 // 0x1\r
+ and r0, r2, #3 // 0x3\r
+ rsb r0, r0, #3 // 0x3\r
+ adds r0, r0, r0, lsl #1\r
+ add pc, pc, r0, lsl #3\r
+ nop // (mov r0,r0)\r
+ASM_PFX(_ll_udiv_big_label3):\r
+ adcs r5, r5, r5\r
+ adcs r4, r4, r4\r
+ adcs r0, lr, r5\r
+ adcs r1, ip, r4\r
+ movcs r5, r0\r
+ movcs r4, r1\r
+ adcs r5, r5, r5\r
+ adcs r4, r4, r4\r
+ adcs r0, lr, r5\r
+ adcs r1, ip, r4\r
+ movcs r5, r0\r
+ movcs r4, r1\r
+ adcs r5, r5, r5\r
+ adcs r4, r4, r4\r
+ adcs r0, lr, r5\r
+ adcs r1, ip, r4\r
+ movcs r5, r0\r
+ movcs r4, r1\r
+ sub r2, r2, #4 // 0x4\r
+ adcs r5, r5, r5\r
+ adcs r4, r4, r4\r
+ adcs r0, lr, r5\r
+ adcs r1, ip, r4\r
+ tst r2, r2\r
+ movcs r5, r0\r
+ movcs r4, r1\r
+ bpl ASM_PFX(_ll_udiv_big_label3)\r
+ASM_PFX(_ll_udiv_big_label4):\r
+ mov r1, #0 // 0x0\r
+ mov r2, r5, lsr r6\r
+ bic r5, r5, r2, lsl r6\r
+ adcs r0, r5, r5\r
+ adc r1, r1, #0 // 0x0\r
+ movs lr, r3, lsl r6\r
+ mov r3, r4, lsr r6\r
+ bic r4, r4, r3, lsl r6\r
+ adc r1, r1, #0 // 0x0\r
+ adds r0, r0, lr\r
+ orr r2, r2, r4, ror r6\r
+ adc r1, r1, #0 // 0x0\r
+ ldmia sp!, {r4, r5, r6, pc}\r
+\r
+ASM_PFX(_ll_udiv_ginormous):\r
+ subs r2, r5, lr\r
+ mov r1, #0 // 0x0\r
+ sbcs r3, r4, ip\r
+ adc r0, r1, r1\r
+ movcc r2, r5\r
+ movcc r3, r4\r
+ ldmia sp!, {r4, r5, r6, pc}\r
+\r
+ASM_PFX(_ll_div0):\r
+ ldmia sp!, {r4, r5, r6, lr}\r
+ mov r0, #0 // 0x0\r
+ mov r1, #0 // 0x0\r
+ b ASM_PFX(__aeabi_ldiv0)\r
+\r
+ASM_PFX(__aeabi_ldiv0):\r
+ bx r14\r
+\r
+\r