/*1* libgcc1 routines for Blackfin 5xx2*3* Copyright 2004-2009 Analog Devices Inc.4*5* Licensed under the ADI BSD license or the GPL-2 (or later)6*/78#ifdef CONFIG_ARITHMETIC_OPS_L19.section .l1.text10#else11.text12#endif1314.extern ___udivsi3;15.type ___udivsi3, STT_FUNC;16.globl ___umodsi317.type ___umodsi3, STT_FUNC;18___umodsi3:1920CC=R0==0;21IF CC JUMP .LRETURN_R0; /* Return 0, if NR == 0 */22CC= R1==0;23IF CC JUMP .LRETURN_ZERO_VAL; /* Return 0, if DR == 0 */24CC=R0==R1;25IF CC JUMP .LRETURN_ZERO_VAL; /* Return 0, if NR == DR */26CC = R1 == 1;27IF CC JUMP .LRETURN_ZERO_VAL; /* Return 0, if DR == 1 */28CC = R0<R1 (IU);29IF CC JUMP .LRETURN_R0; /* Return dividend (R0),IF NR<DR */3031[--SP] = (R7:6); /* Push registers and */32[--SP] = RETS; /* Return address */33R7 = R0; /* Copy of R0 */34R6 = R1;35SP += -12; /* Should always provide this space */36CALL ___udivsi3; /* Compute unsigned quotient using ___udiv32()*/37SP += 12;38R0 *= R6; /* Quotient * divisor */39R0 = R7 - R0; /* Dividend - (quotient * divisor) */40RETS = [SP++]; /* Pop return address */41( R7:6) = [SP++]; /* And registers */42RTS; /* Return remainder */43.LRETURN_ZERO_VAL:44R0 = 0;45.LRETURN_R0:46RTS;4748.size ___umodsi3, .-___umodsi3495051