1*b1e83836Smrg /* Copyright (C) 2000-2022 Free Software Foundation, Inc.
248fb7bfaSmrg
348fb7bfaSmrg This file is part of GCC.
448fb7bfaSmrg
548fb7bfaSmrg GCC is free software; you can redistribute it and/or modify it under
648fb7bfaSmrg the terms of the GNU General Public License as published by the Free
748fb7bfaSmrg Software Foundation; either version 3, or (at your option) any later
848fb7bfaSmrg version.
948fb7bfaSmrg
1048fb7bfaSmrg GCC is distributed in the hope that it will be useful, but WITHOUT ANY
1148fb7bfaSmrg WARRANTY; without even the implied warranty of MERCHANTABILITY or
1248fb7bfaSmrg FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
1348fb7bfaSmrg for more details.
1448fb7bfaSmrg
1548fb7bfaSmrg Under Section 7 of GPL version 3, you are granted additional
1648fb7bfaSmrg permissions described in the GCC Runtime Library Exception, version
1748fb7bfaSmrg 3.1, as published by the Free Software Foundation.
1848fb7bfaSmrg
1948fb7bfaSmrg You should have received a copy of the GNU General Public License and
2048fb7bfaSmrg a copy of the GCC Runtime Library Exception along with this program;
2148fb7bfaSmrg see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
2248fb7bfaSmrg <http://www.gnu.org/licenses/>. */
2348fb7bfaSmrg
2448fb7bfaSmrg unsigned long
__udivmodsi4(unsigned long num,unsigned long den,int modwanted)25181254a7Smrg __udivmodsi4(unsigned long num, unsigned long den, int modwanted)
2648fb7bfaSmrg {
2748fb7bfaSmrg unsigned long bit = 1;
2848fb7bfaSmrg unsigned long res = 0;
2948fb7bfaSmrg
3048fb7bfaSmrg while (den < num && bit && !(den & (1L<<31)))
3148fb7bfaSmrg {
3248fb7bfaSmrg den <<=1;
3348fb7bfaSmrg bit <<=1;
3448fb7bfaSmrg }
3548fb7bfaSmrg while (bit)
3648fb7bfaSmrg {
3748fb7bfaSmrg if (num >= den)
3848fb7bfaSmrg {
3948fb7bfaSmrg num -= den;
4048fb7bfaSmrg res |= bit;
4148fb7bfaSmrg }
4248fb7bfaSmrg bit >>=1;
4348fb7bfaSmrg den >>=1;
4448fb7bfaSmrg }
4548fb7bfaSmrg if (modwanted) return num;
4648fb7bfaSmrg return res;
4748fb7bfaSmrg }
48