]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blob - arch/sh/lib64/udivsi3.S
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
[mirror_ubuntu-bionic-kernel.git] / arch / sh / lib64 / udivsi3.S
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