ARM: Return both the quotient and the remainder.

* lib/mes/div.c (__aeabi_idivmod): Use ldiv.  Return both quotient and
remainder.
(__aeabi_uidivmod): Use __mesabi_uldiv.  Return both quotient and remainder.
This commit is contained in:
Danny Milosavljevic 2019-03-11 19:33:53 +01:00 committed by Jan Nieuwenhuizen
parent 899b613dbc
commit 9a84e94a0a
No known key found for this signature in database
GPG Key ID: F3C1A0D9C1D65273
1 changed files with 17 additions and 4 deletions

View File

@ -119,11 +119,14 @@ ldiv_t ldiv(long a, long b)
// /gnu/store/7sfr3vhxq7l4mai8m0fr1cd8w9xcj9dh-binutils-2.31.1/bin/ld: gcc-lib/libc.a(ntoab.o): in function `ntoab':
// ntoab.c:(.text+0x54): undefined reference to `__aeabi_uidivmod'
// /gnu/store/7sfr3vhxq7l4mai8m0fr1cd8w9xcj9dh-binutils-2.31.1/bin/ld: ntoab.c:(.text+0x62): undefined reference to `__aeabi_uidiv'
/* Result: r0: quotient; r1: remainder */
long
__aeabi_idivmod (long a, long b)
{
ldiv_t result = ldiv(a, b);
return result.rem;
register long rem_result asm("r1");
rem_result = result.rem;
return result.quot;
}
long
@ -133,12 +136,22 @@ __aeabi_idiv (long a, long b)
return result.quot;
}
typedef struct
{
unsigned long quot;
unsigned long rem;
} uidiv_t;
/* Result: r0: quotient; r1: remainder */
unsigned long
__aeabi_uidivmod (unsigned long a, unsigned long b)
{
unsigned long remainder;
__mesabi_uldiv (a, b, &remainder);
return remainder;
unsigned long quot;
unsigned long rem;
register unsigned long rem_result asm("r1");
quot = __mesabi_uldiv (a, b, &rem);
rem_result = rem;
return quot;
}
unsigned long