Merge branch 'resizex' (patches from Maciej)
[linux-2.6-microblaze.git] / arch / hexagon / lib / divsi3.S
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright (c) 2021, The Linux Foundation. All rights reserved.
4  */
5
6 #include <linux/linkage.h>
7
8 SYM_FUNC_START(__hexagon_divsi3)
9         {
10                 p0 = cmp.gt(r0,#-1)
11                 p1 = cmp.gt(r1,#-1)
12                 r3:2 = vabsw(r1:0)
13         }
14         {
15                 p3 = xor(p0,p1)
16                 r4 = sub(r2,r3)
17                 r6 = cl0(r2)
18                 p0 = cmp.gtu(r3,r2)
19         }
20         {
21                 r0 = mux(p3,#-1,#1)
22                 r7 = cl0(r3)
23                 p1 = cmp.gtu(r3,r4)
24         }
25         {
26                 r0 = mux(p0,#0,r0)
27                 p0 = or(p0,p1)
28                 if (p0.new) jumpr:nt r31
29                 r6 = sub(r7,r6)
30         }
31         {
32                 r7 = r6
33                 r5:4 = combine(#1,r3)
34                 r6 = add(#1,lsr(r6,#1))
35                 p0 = cmp.gtu(r6,#4)
36         }
37         {
38                 r5:4 = vaslw(r5:4,r7)
39                 if (!p0) r6 = #3
40         }
41         {
42                 loop0(1f,r6)
43                 r7:6 = vlsrw(r5:4,#1)
44                 r1:0 = #0
45         }
46         .falign
47 1:
48         {
49                 r5:4 = vlsrw(r5:4,#2)
50                 if (!p0.new) r0 = add(r0,r5)
51                 if (!p0.new) r2 = sub(r2,r4)
52                 p0 = cmp.gtu(r4,r2)
53         }
54         {
55                 r7:6 = vlsrw(r7:6,#2)
56                 if (!p0.new) r0 = add(r0,r7)
57                 if (!p0.new) r2 = sub(r2,r6)
58                 p0 = cmp.gtu(r6,r2)
59         }:endloop0
60         {
61                 if (!p0) r0 = add(r0,r7)
62         }
63         {
64                 if (p3) r0 = sub(r1,r0)
65                 jumpr r31
66         }
67 SYM_FUNC_END(__hexagon_divsi3)