string/memory functions: avoid qemu bugs/performance issues.
Use V on real hardware, but GC on qemu.
Change-Id: I419546d94555540e14a14dcc52bd99413cbbcfa1
diff --git a/libc/Android.bp b/libc/Android.bp
index 174ecd9..6e5bddd 100644
--- a/libc/Android.bp
+++ b/libc/Android.bp
@@ -664,8 +664,9 @@
},
arm64: {
srcs: [
- "upstream-openbsd/lib/libc/string/stpncpy.c",
+ "upstream-openbsd/lib/libc/string/memrchr.c",
"upstream-openbsd/lib/libc/string/strcat.c",
+ "upstream-openbsd/lib/libc/string/stpncpy.c",
"upstream-openbsd/lib/libc/string/strlcat.c",
"upstream-openbsd/lib/libc/string/strlcpy.c",
"upstream-openbsd/lib/libc/string/strncat.c",
@@ -681,7 +682,9 @@
],
},
x86: {
- // This space intentionally left blank.
+ srcs: [
+ // x86 has custom implementations of all of these.
+ ],
},
x86_64: {
srcs: [
@@ -849,29 +852,6 @@
"arch-arm/bionic/syscall.S",
"arch-arm/bionic/vfork.S",
- "bionic/strchr.cpp",
- "bionic/strchrnul.cpp",
- "bionic/strnlen.c",
- "bionic/strrchr.cpp",
-
- "arch-arm/generic/bionic/memcmp.S",
- "arch-arm/generic/bionic/memmove.S",
- "arch-arm/generic/bionic/memset.S",
- "arch-arm/generic/bionic/stpcpy.c",
- "arch-arm/generic/bionic/strcat.c",
- "arch-arm/generic/bionic/strcmp.S",
- "arch-arm/generic/bionic/strcpy.S",
- "arch-arm/generic/bionic/strlen.c",
-
- "arch-arm/cortex-a15/bionic/memcpy.S",
- "arch-arm/cortex-a15/bionic/memmove.S",
- "arch-arm/cortex-a15/bionic/memset.S",
- "arch-arm/cortex-a15/bionic/stpcpy.S",
- "arch-arm/cortex-a15/bionic/strcat.S",
- "arch-arm/cortex-a15/bionic/strcmp.S",
- "arch-arm/cortex-a15/bionic/strcpy.S",
- "arch-arm/cortex-a15/bionic/strlen.S",
-
"arch-arm/cortex-a7/bionic/memcpy.S",
"arch-arm/cortex-a7/bionic/memset.S",
@@ -882,14 +862,37 @@
"arch-arm/cortex-a9/bionic/strcpy.S",
"arch-arm/cortex-a9/bionic/strlen.S",
- "arch-arm/krait/bionic/memcpy.S",
- "arch-arm/krait/bionic/memset.S",
+ "arch-arm/cortex-a15/bionic/memcpy.S",
+ "arch-arm/cortex-a15/bionic/memmove.S",
+ "arch-arm/cortex-a15/bionic/memset.S",
+ "arch-arm/cortex-a15/bionic/stpcpy.S",
+ "arch-arm/cortex-a15/bionic/strcat.S",
+ "arch-arm/cortex-a15/bionic/strcmp.S",
+ "arch-arm/cortex-a15/bionic/strcpy.S",
+ "arch-arm/cortex-a15/bionic/strlen.S",
"arch-arm/cortex-a53/bionic/memcpy.S",
"arch-arm/cortex-a55/bionic/memcpy.S",
+ "arch-arm/generic/bionic/memcmp.S",
+ "arch-arm/generic/bionic/memmove.S",
+ "arch-arm/generic/bionic/memset.S",
+ "arch-arm/generic/bionic/stpcpy.c",
+ "arch-arm/generic/bionic/strcat.c",
+ "arch-arm/generic/bionic/strcmp.S",
+ "arch-arm/generic/bionic/strcpy.S",
+ "arch-arm/generic/bionic/strlen.c",
+
+ "arch-arm/krait/bionic/memcpy.S",
+ "arch-arm/krait/bionic/memset.S",
+
"arch-arm/kryo/bionic/memcpy.S",
+
+ "bionic/strchr.cpp",
+ "bionic/strchrnul.cpp",
+ "bionic/strnlen.cpp",
+ "bionic/strrchr.cpp",
],
},
arm64: {
@@ -910,27 +913,40 @@
"arch-riscv64/bionic/syscall.S",
"arch-riscv64/bionic/vfork.S",
- // TODO(b/306514350): Remove this and replace with the optimized
- // version once the bug is resolved.
- "upstream-freebsd/lib/libc/string/memcmp.c",
+ "arch-riscv64/string/memchr_v.S",
+ "arch-riscv64/string/memcmp_v.S",
+ "arch-riscv64/string/memcpy_v.S",
+ "arch-riscv64/string/memmove_v.S",
+ "arch-riscv64/string/memset_v.S",
+ "arch-riscv64/string/stpcpy_v.S",
+ "arch-riscv64/string/strcat_v.S",
+ "arch-riscv64/string/strchr_v.S",
+ "arch-riscv64/string/strcmp_v.S",
+ "arch-riscv64/string/strcpy_v.S",
+ "arch-riscv64/string/strlen_v.S",
+ "arch-riscv64/string/strncat_v.S",
+ "arch-riscv64/string/strncmp_v.S",
+ "arch-riscv64/string/strncpy_v.S",
+ "arch-riscv64/string/strnlen_v.S",
+
+ "arch-riscv64/string/memchr.c",
+ "arch-riscv64/string/memcmp.c",
+ "arch-riscv64/string/memcpy.c",
+ "arch-riscv64/string/memmove.c",
+ "arch-riscv64/string/memset.c",
+ "arch-riscv64/string/stpcpy.c",
+ "arch-riscv64/string/strcat.c",
+ "arch-riscv64/string/strchr.c",
+ "arch-riscv64/string/strcmp.c",
+ "arch-riscv64/string/strcpy.c",
+ "arch-riscv64/string/strlen.c",
+ "arch-riscv64/string/strncat.c",
+ "arch-riscv64/string/strncmp.c",
+ "arch-riscv64/string/strncpy.c",
+ "arch-riscv64/string/strnlen.c",
"bionic/strchrnul.cpp",
"bionic/strrchr.cpp",
-
- "arch-riscv64/string/memchr.S",
- "arch-riscv64/string/memcpy.S",
- "arch-riscv64/string/memmove.S",
- "arch-riscv64/string/memset.S",
- "arch-riscv64/string/stpcpy.S",
- "arch-riscv64/string/strcat.S",
- "arch-riscv64/string/strchr.S",
- "arch-riscv64/string/strcmp.S",
- "arch-riscv64/string/strcpy.S",
- "arch-riscv64/string/strlen.S",
- "arch-riscv64/string/strncat.S",
- "arch-riscv64/string/strncmp.S",
- "arch-riscv64/string/strncpy.S",
- "arch-riscv64/string/strnlen.S",
],
},
@@ -945,8 +961,6 @@
"arch-x86/bionic/vfork.S",
"arch-x86/bionic/__x86.get_pc_thunk.S",
- "bionic/strchrnul.cpp",
-
"arch-x86/generic/string/memcmp.S",
"arch-x86/generic/string/strcmp.S",
"arch-x86/generic/string/strncmp.S",
@@ -994,6 +1008,8 @@
"arch-x86/string/sse4-memcmp-slm.S",
"arch-x86/string/sse4-wmemcmp-slm.S",
+
+ "bionic/strchrnul.cpp",
],
},
x86_64: {
@@ -1005,11 +1021,6 @@
"arch-x86_64/bionic/syscall.S",
"arch-x86_64/bionic/vfork.S",
- "bionic/strchr.cpp",
- "bionic/strchrnul.cpp",
- "bionic/strnlen.c",
- "bionic/strrchr.cpp",
-
"arch-x86_64/string/avx2-memset-kbl.S",
"arch-x86_64/string/sse2-memmove-slm.S",
"arch-x86_64/string/sse2-memset-slm.S",
@@ -1023,6 +1034,11 @@
"arch-x86_64/string/sse4-memcmp-slm.S",
"arch-x86_64/string/ssse3-strcmp-slm.S",
"arch-x86_64/string/ssse3-strncmp-slm.S",
+
+ "bionic/strchr.cpp",
+ "bionic/strchrnul.cpp",
+ "bionic/strnlen.cpp",
+ "bionic/strrchr.cpp",
],
},
},
@@ -1540,6 +1556,9 @@
arm64: {
srcs: ["arch-arm64/static_function_dispatch.S"],
},
+ riscv64: {
+ srcs: ["arch-riscv64/static_function_dispatch.S"]
+ },
},
}
@@ -1568,6 +1587,9 @@
arm64: {
srcs: ["arch-arm64/dynamic_function_dispatch.cpp"],
},
+ riscv64: {
+ srcs: ["arch-riscv64/dynamic_function_dispatch.cpp"]
+ },
},
}