summaryrefslogtreecommitdiff
path: root/arch/hexagon/lib/udivsi3.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/udivsi3.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/udivsi3.S')
-rw-r--r--arch/hexagon/lib/udivsi3.S38
1 files changed, 38 insertions, 0 deletions
diff --git a/arch/hexagon/lib/udivsi3.S b/arch/hexagon/lib/udivsi3.S
new file mode 100644
index 000000000000..477f27b9311c
--- /dev/null
+++ b/arch/hexagon/lib/udivsi3.S
@@ -0,0 +1,38 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2021, The Linux Foundation. All rights reserved.
+ */
+
+#include <linux/linkage.h>
+
+SYM_FUNC_START(__hexagon_udivsi3)
+ {
+ r2 = cl0(r0)
+ r3 = cl0(r1)
+ r5:4 = combine(#1,#0)
+ p0 = cmp.gtu(r1,r0)
+ }
+ {
+ r6 = sub(r3,r2)
+ r4 = r1
+ r1:0 = combine(r0,r4)
+ if (p0) jumpr r31
+ }
+ {
+ r3:2 = vlslw(r5:4,r6)
+ loop0(1f,r6)
+ }
+ .falign
+1:
+ {
+ p0 = cmp.gtu(r2,r1)
+ if (!p0.new) r1 = sub(r1,r2)
+ if (!p0.new) r0 = add(r0,r3)
+ r3:2 = vlsrw(r3:2,#1)
+ }:endloop0
+ {
+ p0 = cmp.gtu(r2,r1)
+ if (!p0.new) r0 = add(r0,r3)
+ jumpr r31
+ }
+SYM_FUNC_END(__hexagon_udivsi3)