xref: /linux/arch/hexagon/lib/umodsi3.S (revision c532de5a67a70f8533d495f8f2aaa9a0491c3ad0)
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
8SYM_FUNC_START(__hexagon_umodsi3)
9        {
10                r2 = cl0(r0)
11                r3 = cl0(r1)
12                p0 = cmp.gtu(r1,r0)
13        }
14        {
15                r2 = sub(r3,r2)
16                if (p0) jumpr r31
17        }
18        {
19                loop0(1f,r2)
20                p1 = cmp.eq(r2,#0)
21                r2 = lsl(r1,r2)
22        }
23        .falign
241:
25        {
26                p0 = cmp.gtu(r2,r0)
27                if (!p0.new) r0 = sub(r0,r2)
28                r2 = lsr(r2,#1)
29                if (p1) r1 = #0
30        }:endloop0
31        {
32                p0 = cmp.gtu(r2,r0)
33                if (!p0.new) r0 = sub(r0,r1)
34                jumpr r31
35        }
36SYM_FUNC_END(__hexagon_umodsi3)
37