#include <linux/linkage.h>
#include <asm/asmmacro.h>
#include <asm/core.h>
ENTRY(__umodsi3)
abi_entry_default
#if XCHAL_HAVE_DIV32
remu a2, a2, a3
#else
bltui a3, 2, .Lle_one
do_nsau a5, a2, a6, a7
do_nsau a4, a3, a6, a7
bgeu a5, a4, .Lspecial
sub a4, a4, a5
ssl a4
sll a3, a3
#if XCHAL_HAVE_LOOPS
loopnez a4, .Lloopend
#endif
.Lloop:
bltu a2, a3, .Lzerobit
sub a2, a2, a3
.Lzerobit:
srli a3, a3, 1
#if !XCHAL_HAVE_LOOPS
addi a4, a4, -1
bnez a4, .Lloop
#endif
.Lloopend:
.Lspecial:
bltu a2, a3, .Lreturn
sub a2, a2, a3
.Lreturn:
abi_ret_default
.Lle_one:
bnez a3, .Lreturn0
ill
.ascii "DIV0"
.Lreturn0:
movi a2, 0
#endif
abi_ret_default
ENDPROC(__umodsi3)
EXPORT_SYMBOL(__umodsi3)