1eb2ecd0b49dcc15e4ffbf241e6fdc2e76e055efdAnton Korobeynikov//===-- aeabi_idivmod.S - EABI idivmod implementation ---------------------===//
2eb2ecd0b49dcc15e4ffbf241e6fdc2e76e055efdAnton Korobeynikov//
3eb2ecd0b49dcc15e4ffbf241e6fdc2e76e055efdAnton Korobeynikov//                     The LLVM Compiler Infrastructure
4eb2ecd0b49dcc15e4ffbf241e6fdc2e76e055efdAnton Korobeynikov//
5eb2ecd0b49dcc15e4ffbf241e6fdc2e76e055efdAnton Korobeynikov// This file is dual licensed under the MIT and the University of Illinois Open
6eb2ecd0b49dcc15e4ffbf241e6fdc2e76e055efdAnton Korobeynikov// Source Licenses. See LICENSE.TXT for details.
7eb2ecd0b49dcc15e4ffbf241e6fdc2e76e055efdAnton Korobeynikov//
8eb2ecd0b49dcc15e4ffbf241e6fdc2e76e055efdAnton Korobeynikov//===----------------------------------------------------------------------===//
9eb2ecd0b49dcc15e4ffbf241e6fdc2e76e055efdAnton Korobeynikov
10eb2ecd0b49dcc15e4ffbf241e6fdc2e76e055efdAnton Korobeynikov#include "../assembly.h"
11eb2ecd0b49dcc15e4ffbf241e6fdc2e76e055efdAnton Korobeynikov
12eb2ecd0b49dcc15e4ffbf241e6fdc2e76e055efdAnton Korobeynikov// struct { int quot, int rem} __aeabi_idivmod(int numerator, int denominator) {
13eb2ecd0b49dcc15e4ffbf241e6fdc2e76e055efdAnton Korobeynikov//   int rem, quot;
14eb2ecd0b49dcc15e4ffbf241e6fdc2e76e055efdAnton Korobeynikov//   quot = __divmodsi4(numerator, denominator, &rem);
15eb2ecd0b49dcc15e4ffbf241e6fdc2e76e055efdAnton Korobeynikov//   return {quot, rem};
16eb2ecd0b49dcc15e4ffbf241e6fdc2e76e055efdAnton Korobeynikov// }
17eb2ecd0b49dcc15e4ffbf241e6fdc2e76e055efdAnton Korobeynikov
18eb2ecd0b49dcc15e4ffbf241e6fdc2e76e055efdAnton Korobeynikov        .syntax unified
19eb2ecd0b49dcc15e4ffbf241e6fdc2e76e055efdAnton Korobeynikov        .align 2
20eb2ecd0b49dcc15e4ffbf241e6fdc2e76e055efdAnton KorobeynikovDEFINE_COMPILERRT_FUNCTION(__aeabi_idivmod)
21eb2ecd0b49dcc15e4ffbf241e6fdc2e76e055efdAnton Korobeynikov        push    { lr }
22eb2ecd0b49dcc15e4ffbf241e6fdc2e76e055efdAnton Korobeynikov        sub     sp, sp, #4
23eb2ecd0b49dcc15e4ffbf241e6fdc2e76e055efdAnton Korobeynikov        mov     r2, sp
24eb2ecd0b49dcc15e4ffbf241e6fdc2e76e055efdAnton Korobeynikov        bl      SYMBOL_NAME(__divmodsi4)
25eb2ecd0b49dcc15e4ffbf241e6fdc2e76e055efdAnton Korobeynikov        ldr     r1, [sp]
26eb2ecd0b49dcc15e4ffbf241e6fdc2e76e055efdAnton Korobeynikov        add     sp, sp, #4
27eb2ecd0b49dcc15e4ffbf241e6fdc2e76e055efdAnton Korobeynikov        pop     { pc }
28