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