| //------------------------------------------------------------------------------ | |
| // | |
| // Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR> | |
| // Copyright (c) 2018, Pete Batard. All rights reserved.<BR> | |
| // | |
| // SPDX-License-Identifier: BSD-2-Clause-Patent | |
| // | |
| //------------------------------------------------------------------------------ | |
| IMPORT __aeabi_uldivmod | |
| EXPORT __aeabi_ldivmod | |
| EXPORT __rt_sdiv64 | |
| AREA s___aeabi_ldivmod, CODE, READONLY, ARM | |
| ARM | |
| ; | |
| ;INT64 | |
| ;EFIAPI | |
| ;__rt_sdiv64 ( | |
| ; IN INT64 Divisor | |
| ; IN INT64 Dividend | |
| ; ); | |
| ; | |
| __rt_sdiv64 | |
| ; Swap r0-r1 and r2-r3 | |
| MOV r12, r0 | |
| MOV r0, r2 | |
| MOV r2, r12 | |
| MOV r12, r1 | |
| MOV r1, r3 | |
| MOV r3, r12 | |
| B __aeabi_ldivmod | |
| ; | |
| ;INT64 | |
| ;EFIAPI | |
| ;__aeabi_ldivmod ( | |
| ; IN INT64 Dividend | |
| ; IN INT64 Divisor | |
| ; ); | |
| ; | |
| __aeabi_ldivmod | |
| PUSH {r4,lr} | |
| ASRS r4,r1,#1 | |
| EOR r4,r4,r3,LSR #1 | |
| BPL L_Test1 | |
| RSBS r0,r0,#0 | |
| RSC r1,r1,#0 | |
| L_Test1 | |
| TST r3,r3 | |
| BPL L_Test2 | |
| RSBS r2,r2,#0 | |
| RSC r3,r3,#0 | |
| L_Test2 | |
| BL __aeabi_uldivmod | |
| TST r4,#0x40000000 | |
| BEQ L_Test3 | |
| RSBS r0,r0,#0 | |
| RSC r1,r1,#0 | |
| L_Test3 | |
| TST r4,#0x80000000 | |
| BEQ L_Exit | |
| RSBS r2,r2,#0 | |
| RSC r3,r3,#0 | |
| L_Exit | |
| POP {r4,pc} | |
| END |