summaryrefslogtreecommitdiff
path: root/sys/src/ape/lib/ap/spim/memchr.s
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2015-10-04 19:50:24 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2015-10-04 19:50:24 +0200
commit9e3ef5c777971707ab4ba426bb55d3bb2553ddf9 (patch)
treea5126925764bd3cb47d8702bab4bbd8b6b02aea3 /sys/src/ape/lib/ap/spim/memchr.s
parentd2af6b40af268fafdbd04c0222e785167b9ae021 (diff)
ape: add machine specific code for spim
Diffstat (limited to 'sys/src/ape/lib/ap/spim/memchr.s')
-rw-r--r--sys/src/ape/lib/ap/spim/memchr.s39
1 files changed, 39 insertions, 0 deletions
diff --git a/sys/src/ape/lib/ap/spim/memchr.s b/sys/src/ape/lib/ap/spim/memchr.s
new file mode 100644
index 000000000..b244ea279
--- /dev/null
+++ b/sys/src/ape/lib/ap/spim/memchr.s
@@ -0,0 +1,39 @@
+TEXT memchr(SB), $0
+ MOVW R1, 0(FP)
+
+ MOVW n+8(FP), R1
+ MOVW s1+0(FP), R2
+ MOVBU c+4(FP), R3
+ ADDU R1, R2, R6
+
+ AND $(~1), R1, R5
+ ADDU R2, R5
+ BEQ R2, R5, lt2
+
+l1:
+ MOVBU 0(R2), R4
+ MOVBU 1(R2), R7
+ BEQ R3, R4, eq0
+ ADDU $2, R2
+ BEQ R3, R7, eq
+ BNE R2, R5, l1
+
+lt2:
+ BEQ R2, R6, zret
+
+l2:
+ MOVBU (R2), R4
+ ADDU $1, R2
+ BEQ R3, R4, eq
+ BNE R2, R6, l2
+zret:
+ MOVW R0, R1
+ RET
+
+eq0:
+ MOVW R2, R1
+ RET
+
+eq:
+ SUBU $1,R2, R1
+ RET