root/arch/sh/lib64/udivsi3.S

/* [<][>][^][v][top][bottom][index][help] */
   1 /* SPDX-License-Identifier: GPL-2.0 */
   2         .global __udivsi3
   3         .section        .text..SHmedia32,"ax"
   4         .align  2
   5 
   6 /*
   7    inputs: r4,r5
   8    clobbered: r18,r19,r20,r21,r22,r25,tr0
   9    result in r0.
  10  */
  11 __udivsi3:
  12         addz.l r5,r63,r22
  13         nsb r22,r0
  14         shlld r22,r0,r25
  15         shlri r25,48,r25
  16         movi 0xffffffffffffbb0c,r20 /* shift count eqiv 76 */
  17         sub r20,r25,r21
  18         mmulfx.w r21,r21,r19
  19         mshflo.w r21,r63,r21
  20         ptabs r18,tr0
  21         mmulfx.w r25,r19,r19
  22         sub r20,r0,r0
  23         /* bubble */
  24         msub.w r21,r19,r19
  25 
  26         /*
  27          * It would be nice for scheduling to do this add to r21 before
  28          * the msub.w, but we need a different value for r19 to keep
  29          * errors under control.
  30          */
  31         addi r19,-2,r21
  32         mulu.l r4,r21,r18
  33         mmulfx.w r19,r19,r19
  34         shlli r21,15,r21
  35         shlrd r18,r0,r18
  36         mulu.l r18,r22,r20
  37         mmacnfx.wl r25,r19,r21
  38         /* bubble */
  39         sub r4,r20,r25
  40 
  41         mulu.l r25,r21,r19
  42         addi r0,14,r0
  43         /* bubble */
  44         shlrd r19,r0,r19
  45         mulu.l r19,r22,r20
  46         add r18,r19,r18
  47         /* bubble */
  48         sub.l r25,r20,r25
  49 
  50         mulu.l r25,r21,r19
  51         addz.l r25,r63,r25
  52         sub r25,r22,r25
  53         shlrd r19,r0,r19
  54         mulu.l r19,r22,r20
  55         addi r25,1,r25
  56         add r18,r19,r18
  57 
  58         cmpgt r25,r20,r25
  59         add.l r18,r25,r0
  60         blink tr0,r63

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