xref: /rk3399_ARM-atf/lib/compiler-rt/builtins/arm/aeabi_ldivmod.S (revision 8a6a9560b5dcccfb68064c0c8c9b4b47981c6ac7)
18c80c865SLionel Debieve//===-- aeabi_ldivmod.S - EABI ldivmod implementation ---------------------===//
28c80c865SLionel Debieve//
3*8a6a9560SDaniel Boulby// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*8a6a9560SDaniel Boulby// See https://llvm.org/LICENSE.txt for license information.
5*8a6a9560SDaniel Boulby// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
68c80c865SLionel Debieve//
78c80c865SLionel Debieve//===----------------------------------------------------------------------===//
88c80c865SLionel Debieve
98c80c865SLionel Debieve#include "../assembly.h"
108c80c865SLionel Debieve
118c80c865SLionel Debieve// struct { int64_t quot, int64_t rem}
128c80c865SLionel Debieve//        __aeabi_ldivmod(int64_t numerator, int64_t denominator) {
138c80c865SLionel Debieve//   int64_t rem, quot;
148c80c865SLionel Debieve//   quot = __divmoddi4(numerator, denominator, &rem);
158c80c865SLionel Debieve//   return {quot, rem};
168c80c865SLionel Debieve// }
178c80c865SLionel Debieve
188c80c865SLionel Debieve#if defined(__MINGW32__)
198c80c865SLionel Debieve#define __aeabi_ldivmod __rt_sdiv64
208c80c865SLionel Debieve#endif
218c80c865SLionel Debieve
228c80c865SLionel Debieve        .syntax unified
238c80c865SLionel Debieve        .p2align 2
248c80c865SLionel DebieveDEFINE_COMPILERRT_FUNCTION(__aeabi_ldivmod)
258c80c865SLionel Debieve        push    {r6, lr}
268c80c865SLionel Debieve        sub     sp, sp, #16
278c80c865SLionel Debieve        add     r6, sp, #8
288c80c865SLionel Debieve        str     r6, [sp]
298c80c865SLionel Debieve#if defined(__MINGW32__)
308c80c865SLionel Debieve        movs    r6, r0
318c80c865SLionel Debieve        movs    r0, r2
328c80c865SLionel Debieve        movs    r2, r6
338c80c865SLionel Debieve        movs    r6, r1
348c80c865SLionel Debieve        movs    r1, r3
358c80c865SLionel Debieve        movs    r3, r6
368c80c865SLionel Debieve#endif
378c80c865SLionel Debieve        bl      SYMBOL_NAME(__divmoddi4)
388c80c865SLionel Debieve        ldr     r2, [sp, #8]
398c80c865SLionel Debieve        ldr     r3, [sp, #12]
408c80c865SLionel Debieve        add     sp, sp, #16
418c80c865SLionel Debieve        pop     {r6, pc}
428c80c865SLionel DebieveEND_COMPILERRT_FUNCTION(__aeabi_ldivmod)
438c80c865SLionel Debieve
448c80c865SLionel DebieveNO_EXEC_STACK_DIRECTIVE
458c80c865SLionel Debieve
46