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 61