libc: import ARM strcmp from newlib
* Current version is also based on newlib, but an older revision
* The Krait and A9 specific changes no longer seem relevant, so
let's use A15 directly.
Tested on OnePlus 3 (MSM8996):
Before (Krait strcmp):
iterations ns/op
BM_string_strcmp/8 1000k 24 0.322 GiB/s
BM_string_strcmp/64 20M 123 0.519 GiB/s
BM_string_strcmp/512 2M 920 0.556 GiB/s
BM_string_strcmp/1024 1000k 1818 0.563 GiB/s
BM_string_strcmp/8Ki 200k 14405 0.569 GiB/s
BM_string_strcmp/16Ki 100k 28762 0.570 GiB/s
BM_string_strcmp/32Ki 50k 57526 0.570 GiB/s
BM_string_strcmp/64Ki 10k 114959 0.570 GiB/s
After:
iterations ns/op
BM_string_strcmp/8 1000k 28 0.284 GiB/s
BM_string_strcmp/64 20M 107 0.596 GiB/s
BM_string_strcmp/512 2M 800 0.639 GiB/s
BM_string_strcmp/1024 1000k 1579 0.649 GiB/s
BM_string_strcmp/8Ki 200k 12469 0.657 GiB/s
BM_string_strcmp/16Ki 100k 24931 0.657 GiB/s
BM_string_strcmp/32Ki 50k 49843 0.657 GiB/s
BM_string_strcmp/64Ki 20k 99635 0.658 GiB/s
Test: bionic-benchmarks BM_string_memcmp
Change-Id: Icb3bfb0a381bcc1e10885ca5e9547842c3f620d7
diff --git a/libc/arch-arm/dynamic_function_dispatch.cpp b/libc/arch-arm/dynamic_function_dispatch.cpp
index 640f330..5e1b8b0 100644
--- a/libc/arch-arm/dynamic_function_dispatch.cpp
+++ b/libc/arch-arm/dynamic_function_dispatch.cpp
@@ -288,16 +288,7 @@
typedef int strcmp_func(const char* __lhs, const char* __rhs);
DEFINE_IFUNC(strcmp) {
- switch(get_cpu_variant()) {
- case kCortexA9:
- RETURN_FUNC(strcmp_func, strcmp_a9);
- case kCortexA55:
- case kKrait:
- case kKryo:
- RETURN_FUNC(strcmp_func, strcmp_krait);
- default:
- RETURN_FUNC(strcmp_func, strcmp_a15);
- }
+ RETURN_FUNC(strcmp_func, strcmp_a15);
}
typedef size_t strlen_func(const char* __s);