svn commit: r305973 - head/contrib/cortex-strings/src/aarch64
Andrew Turner
andrew at FreeBSD.org
Mon Sep 19 14:36:17 UTC 2016
Author: andrew
Date: Mon Sep 19 14:36:16 2016
New Revision: 305973
URL: https://svnweb.freebsd.org/changeset/base/305973
Log:
Fix the asm on the memchr and strchr functions.
Add an alias from index to strchr as is done in the libc C implementation.
Obtained from: ABT Systems Ltd
Sponsored by: The FreeBSD Foundation
Modified:
head/contrib/cortex-strings/src/aarch64/memchr.S
head/contrib/cortex-strings/src/aarch64/strchr.S
head/contrib/cortex-strings/src/aarch64/strchrnul.S
Modified: head/contrib/cortex-strings/src/aarch64/memchr.S
==============================================================================
--- head/contrib/cortex-strings/src/aarch64/memchr.S Mon Sep 19 13:12:09 2016 (r305972)
+++ head/contrib/cortex-strings/src/aarch64/memchr.S Mon Sep 19 14:36:16 2016 (r305973)
@@ -107,7 +107,7 @@ def_fn memchr
and vhas_chr2.16b, vhas_chr2.16b, vrepmask.16b
addp vend.16b, vhas_chr1.16b, vhas_chr2.16b /* 256->128 */
addp vend.16b, vend.16b, vend.16b /* 128->64 */
- mov synd, vend.2d[0]
+ mov synd, vend.d[0]
/* Clear the soff*2 lower bits */
lsl tmp, soff, #1
lsr synd, synd, tmp
@@ -127,7 +127,7 @@ def_fn memchr
/* Use a fast check for the termination condition */
orr vend.16b, vhas_chr1.16b, vhas_chr2.16b
addp vend.2d, vend.2d, vend.2d
- mov synd, vend.2d[0]
+ mov synd, vend.d[0]
/* We're not out of data, loop if we haven't found the character */
cbz synd, .Lloop
@@ -137,7 +137,7 @@ def_fn memchr
and vhas_chr2.16b, vhas_chr2.16b, vrepmask.16b
addp vend.16b, vhas_chr1.16b, vhas_chr2.16b /* 256->128 */
addp vend.16b, vend.16b, vend.16b /* 128->64 */
- mov synd, vend.2d[0]
+ mov synd, vend.d[0]
/* Only do the clear for the last possible block */
b.hi .Ltail
Modified: head/contrib/cortex-strings/src/aarch64/strchr.S
==============================================================================
--- head/contrib/cortex-strings/src/aarch64/strchr.S Mon Sep 19 13:12:09 2016 (r305972)
+++ head/contrib/cortex-strings/src/aarch64/strchr.S Mon Sep 19 14:36:16 2016 (r305973)
@@ -78,7 +78,13 @@
\f:
.endm
+ .macro def_alias f a
+ .weak \a
+ .set \a,\f
+ .endm
+
def_fn strchr
+def_alias strchr index
/* Magic constant 0x40100401 to allow us to identify which lane
matches the requested byte. Magic constant 0x80200802 used
similarly for NUL termination. */
@@ -113,7 +119,7 @@ def_fn strchr
addp vend1.16b, vend1.16b, vend2.16b // 128->64
lsr tmp1, tmp3, tmp1
- mov tmp3, vend1.2d[0]
+ mov tmp3, vend1.d[0]
bic tmp1, tmp3, tmp1 // Mask padding bits.
cbnz tmp1, .Ltail
@@ -128,7 +134,7 @@ def_fn strchr
orr vend2.16b, vhas_nul2.16b, vhas_chr2.16b
orr vend1.16b, vend1.16b, vend2.16b
addp vend1.2d, vend1.2d, vend1.2d
- mov tmp1, vend1.2d[0]
+ mov tmp1, vend1.d[0]
cbz tmp1, .Lloop
/* Termination condition found. Now need to establish exactly why
@@ -142,7 +148,7 @@ def_fn strchr
addp vend1.16b, vend1.16b, vend2.16b // 256->128
addp vend1.16b, vend1.16b, vend2.16b // 128->64
- mov tmp1, vend1.2d[0]
+ mov tmp1, vend1.d[0]
.Ltail:
/* Count the trailing zeros, by bit reversing... */
rbit tmp1, tmp1
Modified: head/contrib/cortex-strings/src/aarch64/strchrnul.S
==============================================================================
--- head/contrib/cortex-strings/src/aarch64/strchrnul.S Mon Sep 19 13:12:09 2016 (r305972)
+++ head/contrib/cortex-strings/src/aarch64/strchrnul.S Mon Sep 19 14:36:16 2016 (r305973)
@@ -105,7 +105,7 @@ def_fn strchrnul
addp vend1.16b, vend1.16b, vend1.16b // 128->64
lsr tmp1, tmp3, tmp1
- mov tmp3, vend1.2d[0]
+ mov tmp3, vend1.d[0]
bic tmp1, tmp3, tmp1 // Mask padding bits.
cbnz tmp1, .Ltail
@@ -120,7 +120,7 @@ def_fn strchrnul
orr vhas_chr2.16b, vhas_nul2.16b, vhas_chr2.16b
orr vend1.16b, vhas_chr1.16b, vhas_chr2.16b
addp vend1.2d, vend1.2d, vend1.2d
- mov tmp1, vend1.2d[0]
+ mov tmp1, vend1.d[0]
cbz tmp1, .Lloop
/* Termination condition found. Now need to establish exactly why
@@ -130,7 +130,7 @@ def_fn strchrnul
addp vend1.16b, vhas_chr1.16b, vhas_chr2.16b // 256->128
addp vend1.16b, vend1.16b, vend1.16b // 128->64
- mov tmp1, vend1.2d[0]
+ mov tmp1, vend1.d[0]
.Ltail:
/* Count the trailing zeros, by bit reversing... */
rbit tmp1, tmp1
More information about the svn-src-all
mailing list