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