1//===----------------------Hexagon builtin routine ------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9
10 .macro FUNCTION_BEGIN name
11 .text
12 .p2align 5
13 .globl \name
14 .type \name, @function
15\name:
16 .endm
17
18 .macro FUNCTION_END name
19 .size \name, . - \name
20 .endm
21
22
23FUNCTION_BEGIN __hexagon_umodsi3
24 {
25 r2 = cl0(r0)
26 r3 = cl0(r1)
27 p0 = cmp.gtu(r1,r0)
28 }
29 {
30 r2 = sub(r3,r2)
31 if (p0) jumpr r31
32 }
33 {
34 loop0(1f,r2)
35 p1 = cmp.eq(r2,#0)
36 r2 = lsl(r1,r2)
37 }
38 .falign
391:
40 {
41 p0 = cmp.gtu(r2,r0)
42 if (!p0.new) r0 = sub(r0,r2)
43 r2 = lsr(r2,#1)
44 if (p1) r1 = #0
45 }:endloop0
46 {
47 p0 = cmp.gtu(r2,r0)
48 if (!p0.new) r0 = sub(r0,r1)
49 jumpr r31
50 }
51FUNCTION_END __hexagon_umodsi3
52
53 .globl __qdsp_umodsi3
54 .set __qdsp_umodsi3, __hexagon_umodsi3
55

source code of compiler-rt/lib/builtins/hexagon/umodsi3.S