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