]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Library/CompilerIntrinsicsLib/Arm/ldivmod.asm
ArmPkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / ArmPkg / Library / CompilerIntrinsicsLib / Arm / ldivmod.asm
CommitLineData
3402aac7 1//------------------------------------------------------------------------------\r
1e57a462 2//\r
3// Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
e58427e3 4// Copyright (c) 2018, Pete Batard. All rights reserved.<BR>\r
1e57a462 5//\r
4059386c 6// SPDX-License-Identifier: BSD-2-Clause-Patent\r
1e57a462 7//\r
8//------------------------------------------------------------------------------\r
9\r
10\r
e58427e3
PB
11 IMPORT __aeabi_uldivmod\r
12 EXPORT __aeabi_ldivmod\r
13 EXPORT __rt_sdiv64\r
3402aac7 14\r
e58427e3
PB
15 AREA s___aeabi_ldivmod, CODE, READONLY, ARM\r
16\r
17 ARM\r
1e57a462 18\r
19;\r
e58427e3 20;INT64\r
1e57a462 21;EFIAPI\r
e58427e3
PB
22;__rt_sdiv64 (\r
23; IN INT64 Divisor\r
24; IN INT64 Dividend\r
1e57a462 25; );\r
26;\r
e58427e3
PB
27__rt_sdiv64\r
28 ; Swap r0-r1 and r2-r3\r
29 MOV r12, r0\r
30 MOV r0, r2\r
31 MOV r2, r12\r
32 MOV r12, r1\r
33 MOV r1, r3\r
34 MOV r3, r12\r
35 B __aeabi_ldivmod\r
1e57a462 36\r
e58427e3
PB
37;\r
38;INT64\r
39;EFIAPI\r
40;__aeabi_ldivmod (\r
41; IN INT64 Dividend\r
42; IN INT64 Divisor\r
43; );\r
44;\r
45__aeabi_ldivmod\r
1e57a462 46 PUSH {r4,lr}\r
47 ASRS r4,r1,#1\r
48 EOR r4,r4,r3,LSR #1\r
49 BPL L_Test1\r
50 RSBS r0,r0,#0\r
51 RSC r1,r1,#0\r
52L_Test1\r
53 TST r3,r3\r
54 BPL L_Test2\r
55 RSBS r2,r2,#0\r
56 RSC r3,r3,#0\r
57L_Test2\r
e58427e3 58 BL __aeabi_uldivmod\r
1e57a462 59 TST r4,#0x40000000\r
60 BEQ L_Test3\r
61 RSBS r0,r0,#0\r
62 RSC r1,r1,#0\r
63L_Test3\r
64 TST r4,#0x80000000\r
65 BEQ L_Exit\r
66 RSBS r2,r2,#0\r
67 RSC r3,r3,#0\r
68L_Exit\r
69 POP {r4,pc}\r
3402aac7 70\r
1e57a462 71 END\r