From ddbb74f5c2ceffcb8f6efcbbb5ffbe4a3641ef93 Mon Sep 17 00:00:00 2001 From: dengjianbo Date: Thu, 24 Aug 2023 16:50:19 +0800 Subject: LoongArch: Add ifunc support for strncmp{aligned, lsx} Based on the glibc microbenchmark, only a few short inputs with this strncmp-aligned and strncmp-lsx implementation experience performance degradation, overall, strncmp-aligned could reduce the runtime 0%-10% for aligned comparision, 10%-25% for unaligend comparision, strncmp-lsx could reduce the runtime about 0%-60%. --- sysdeps/loongarch/lp64/multiarch/ifunc-strncmp.h | 38 ++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 sysdeps/loongarch/lp64/multiarch/ifunc-strncmp.h (limited to 'sysdeps/loongarch/lp64/multiarch/ifunc-strncmp.h') diff --git a/sysdeps/loongarch/lp64/multiarch/ifunc-strncmp.h b/sysdeps/loongarch/lp64/multiarch/ifunc-strncmp.h new file mode 100644 index 0000000000..1a7dc36ba6 --- /dev/null +++ b/sysdeps/loongarch/lp64/multiarch/ifunc-strncmp.h @@ -0,0 +1,38 @@ +/* Common definition for strncmp ifunc selection. + All versions must be listed in ifunc-impl-list.c. + Copyright (C) 2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include +#include + +#if !defined __loongarch_soft_float +extern __typeof (REDIRECT_NAME) OPTIMIZE (lsx) attribute_hidden; +#endif + +extern __typeof (REDIRECT_NAME) OPTIMIZE (aligned) attribute_hidden; + +static inline void * +IFUNC_SELECTOR (void) +{ +#if !defined __loongarch_soft_float + if (SUPPORT_LSX) + return OPTIMIZE (lsx); + else +#endif + return OPTIMIZE (aligned); +} -- cgit 1.4.1