summaryrefslogtreecommitdiff
path: root/arch/hexagon/lib/umodsi3.S
diff options
context:
space:
mode:
authorSid Manning <sidneym@codeaurora.org>2020-10-13 16:17:50 -0500
committerBrian Cain <bcain@codeaurora.org>2021-05-03 11:04:22 -0500
commitf1f99adf05f2138ff2646d756d4674e302e8d02d (patch)
tree9b798fa2ae49a37f95070babf1ded095804722d3 /arch/hexagon/lib/umodsi3.S
parentaaa44952bbd1d4db14a4d676bf9595bb5db7e7b0 (diff)
Hexagon: add target builtins to kernel
Add the compiler-rt builtins like memcpy to the hexagon kernel. Signed-off-by: Sid Manning <sidneym@codeaurora.org> Add SYM_FUNC_START/END, ksyms exports Signed-off-by: Brian Cain <bcain@codeaurora.org> Tested-by: Nick Desaulniers <ndesaulniers@google.com>
Diffstat (limited to 'arch/hexagon/lib/umodsi3.S')
-rw-r--r--arch/hexagon/lib/umodsi3.S36
1 files changed, 36 insertions, 0 deletions
diff --git a/arch/hexagon/lib/umodsi3.S b/arch/hexagon/lib/umodsi3.S
new file mode 100644
index 000000000000..280bf06a55e7
--- /dev/null
+++ b/arch/hexagon/lib/umodsi3.S
@@ -0,0 +1,36 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2021, The Linux Foundation. All rights reserved.
+ */
+
+#include <linux/linkage.h>
+
+SYM_FUNC_START(__hexagon_umodsi3)
+ {
+ r2 = cl0(r0)
+ r3 = cl0(r1)
+ p0 = cmp.gtu(r1,r0)
+ }
+ {
+ r2 = sub(r3,r2)
+ if (p0) jumpr r31
+ }
+ {
+ loop0(1f,r2)
+ p1 = cmp.eq(r2,#0)
+ r2 = lsl(r1,r2)
+ }
+ .falign
+1:
+ {
+ p0 = cmp.gtu(r2,r0)
+ if (!p0.new) r0 = sub(r0,r2)
+ r2 = lsr(r2,#1)
+ if (p1) r1 = #0
+ }:endloop0
+ {
+ p0 = cmp.gtu(r2,r0)
+ if (!p0.new) r0 = sub(r0,r1)
+ jumpr r31
+ }
+SYM_FUNC_END(__hexagon_umodsi3)