root/arch/sh/lib/udivsi3.S

/* [<][>][^][v][top][bottom][index][help] */
   1 /* SPDX-License-Identifier: GPL-2.0+ WITH GCC-exception-2.0
   2 
   3    Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
   4    2004, 2005
   5    Free Software Foundation, Inc.
   6 */
   7 
   8 !! libgcc routines for the Renesas / SuperH SH CPUs.
   9 !! Contributed by Steve Chamberlain.
  10 !! sac@cygnus.com
  11 
  12         .balign 4
  13         .global __udivsi3
  14         .type   __udivsi3, @function
  15 div8:
  16         div1 r5,r4
  17 div7:
  18         div1 r5,r4; div1 r5,r4; div1 r5,r4
  19         div1 r5,r4; div1 r5,r4; div1 r5,r4; rts; div1 r5,r4
  20 
  21 divx4:
  22         div1 r5,r4; rotcl r0
  23         div1 r5,r4; rotcl r0
  24         div1 r5,r4; rotcl r0
  25         rts; div1 r5,r4
  26 
  27 __udivsi3:
  28         sts.l pr,@-r15
  29         extu.w r5,r0
  30         cmp/eq r5,r0
  31         bf/s large_divisor
  32         div0u
  33         swap.w r4,r0
  34         shlr16 r4
  35         bsr div8
  36         shll16 r5
  37         bsr div7
  38         div1 r5,r4
  39         xtrct r4,r0
  40         xtrct r0,r4
  41         bsr div8
  42         swap.w r4,r4
  43         bsr div7
  44         div1 r5,r4
  45         lds.l @r15+,pr
  46         xtrct r4,r0
  47         swap.w r0,r0
  48         rotcl r0
  49         rts
  50         shlr16 r5
  51 
  52 large_divisor:
  53         mov #0,r0
  54         xtrct r4,r0
  55         xtrct r0,r4
  56         bsr divx4
  57         rotcl r0
  58         bsr divx4
  59         rotcl r0
  60         bsr divx4
  61         rotcl r0
  62         bsr divx4
  63         rotcl r0
  64         lds.l @r15+,pr
  65         rts
  66         rotcl r0

/* [<][>][^][v][top][bottom][index][help] */