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 192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines .p2align 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 } 282d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen HinesEND_COMPILERRT_FUNCTION(__aeabi_idivmod) 29