public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Adhemerval Zanella Netto <adhemerval.zanella@linaro.org>
To: dengjianbo <dengjianbo@loongson.cn>, libc-alpha@sourceware.org
Cc: xry111@xry111.site, caiyinyu@loongson.cn, xuchenghua@loongson.cn,
	huangpei@loongson.cn
Subject: Re: [PATCH 2/2] Loongarch: Add ifunc support and add different versions of strlen
Date: Tue, 1 Aug 2023 11:31:17 -0300	[thread overview]
Message-ID: <8367cd72-e458-7a1c-63af-01280d8ccc7a@linaro.org> (raw)
In-Reply-To: <20230801070902.1385953-3-dengjianbo@loongson.cn>



On 01/08/23 04:09, dengjianbo wrote:
> 1. strlen-lasx is implemeted by LASX simd instructions(256bit)
> 2. strlen-lsx is implemeted by LSX simd instructions(128bit)
> 3. strlen-align is implemented by LA basic instructions and never use unaligned memory acess

Usually optimization routines are added along benchmarks number to show
the expected improvements over different sizes and alignment.

> ---
>  sysdeps/loongarch/lp64/multiarch/Makefile     |   3 +
>  .../lp64/multiarch/ifunc-impl-list.c          |  39 +++++++
>  .../loongarch/lp64/multiarch/ifunc-strlen.h   |  36 +++++++
>  .../loongarch/lp64/multiarch/strlen-aligned.S | 101 ++++++++++++++++++
>  .../loongarch/lp64/multiarch/strlen-lasx.S    |  65 +++++++++++
>  sysdeps/loongarch/lp64/multiarch/strlen-lsx.S |  73 +++++++++++++
>  sysdeps/loongarch/lp64/multiarch/strlen.c     |  37 +++++++
>  sysdeps/loongarch/sys/regdef.h                |  57 ++++++++++
>  .../unix/sysv/linux/loongarch/cpu-features.h  |   2 +
>  9 files changed, 413 insertions(+)
>  create mode 100644 sysdeps/loongarch/lp64/multiarch/Makefile
>  create mode 100644 sysdeps/loongarch/lp64/multiarch/ifunc-impl-list.c
>  create mode 100644 sysdeps/loongarch/lp64/multiarch/ifunc-strlen.h
>  create mode 100644 sysdeps/loongarch/lp64/multiarch/strlen-aligned.S
>  create mode 100644 sysdeps/loongarch/lp64/multiarch/strlen-lasx.S
>  create mode 100644 sysdeps/loongarch/lp64/multiarch/strlen-lsx.S
>  create mode 100644 sysdeps/loongarch/lp64/multiarch/strlen.c
> 
> diff --git a/sysdeps/loongarch/lp64/multiarch/Makefile b/sysdeps/loongarch/lp64/multiarch/Makefile
> new file mode 100644
> index 0000000000..529a8b6bab
> --- /dev/null
> +++ b/sysdeps/loongarch/lp64/multiarch/Makefile
> @@ -0,0 +1,3 @@
> +ifeq ($(subdir),string)
> +sysdep_routines += strlen-aligned strlen-lsx strlen-lasx
> +endif

One entry per line:

sysdep_routines += \
  strlen-aligned \
  strlen-lsx \
  strlen-lasx \
  # sysdep_routines

> diff --git a/sysdeps/loongarch/lp64/multiarch/ifunc-impl-list.c b/sysdeps/loongarch/lp64/multiarch/ifunc-impl-list.c
> new file mode 100644
> index 0000000000..b35e41127e
> --- /dev/null
> +++ b/sysdeps/loongarch/lp64/multiarch/ifunc-impl-list.c
> @@ -0,0 +1,39 @@
> +/* Enumerate available IFUNC implementations of a function.  LoongArch64 version.
> +   Copyright (C) 2017-2023 Free Software Foundation, Inc.

I think it should be only 2023 here and for other new file as well.

> +   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
> +   <http://www.gnu.org/licenses/>.  */
> +
> +#include <assert.h>
> +#include <string.h>
> +#include <wchar.h>
> +#include <ldsodefs.h>
> +#include <ifunc-impl-list.h>
> +#include <stdio.h>
> +
> +size_t
> +__libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
> +			size_t max)
> +{
> +
> +  size_t i = max;
> +
> +  IFUNC_IMPL (i, name, strlen,
> +	      IFUNC_IMPL_ADD (array, i, strlen, SUPPORT_LASX, __strlen_lasx)
> +	      IFUNC_IMPL_ADD (array, i, strlen, SUPPORT_LSX, __strlen_lsx)
> +	      IFUNC_IMPL_ADD (array, i, strlen, 1, __strlen_aligned)
> +	      )
> +  return i;
> +}
> diff --git a/sysdeps/loongarch/lp64/multiarch/ifunc-strlen.h b/sysdeps/loongarch/lp64/multiarch/ifunc-strlen.h
> new file mode 100644
> index 0000000000..e2b3490f39
> --- /dev/null
> +++ b/sysdeps/loongarch/lp64/multiarch/ifunc-strlen.h
> @@ -0,0 +1,36 @@
> +/* Common definition for strlen implementation.
> +   All versions must be listed in ifunc-impl-list.c.
> +   Copyright (C) 2017-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
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#include <ldsodefs.h>
> +#include <ifunc-init.h>
> +
> +extern __typeof (REDIRECT_NAME) OPTIMIZE (lasx) attribute_hidden;
> +extern __typeof (REDIRECT_NAME) OPTIMIZE (lsx) attribute_hidden;
> +extern __typeof (REDIRECT_NAME) OPTIMIZE (aligned) attribute_hidden;
> +
> +static inline void *
> +IFUNC_SELECTOR (void)
> +{
> +  if (SUPPORT_LASX)
> +    return OPTIMIZE (lasx);
> +  else if (SUPPORT_LSX)
> +    return OPTIMIZE (lsx);
> +  else
> +    return OPTIMIZE (aligned);
> +}
> diff --git a/sysdeps/loongarch/lp64/multiarch/strlen-aligned.S b/sysdeps/loongarch/lp64/multiarch/strlen-aligned.S
> new file mode 100644
> index 0000000000..b379e978a7
> --- /dev/null
> +++ b/sysdeps/loongarch/lp64/multiarch/strlen-aligned.S
> @@ -0,0 +1,101 @@
> +/* Copyright (C) 2017-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
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#include <sysdep.h>
> +#include <sys/regdef.h>
> +#include <sys/asm.h>
> +
> +#if IS_IN (libc)
> +# define STRLEN __strlen_aligned
> +#else
> +# define STRLEN strlen
> +#endif

Is this really an improvement over the generic implementation? It seems to 
use a quite similar strategy.

> +
> +LEAF(STRLEN, 6)
> +    move        a1, a0
> +    bstrins.d   a0, zero, 2, 0
> +    lu12i.w     a2, 0x01010
> +    li.w        t0, -1
> +
> +    ld.d        t2, a0, 0
> +    andi        t1, a1, 0x7
> +    ori         a2, a2, 0x101
> +    slli.d      t1, t1, 3
> +
> +    bstrins.d   a2, a2, 63, 32
> +    sll.d       t1, t0, t1
> +    slli.d      t3, a2, 7
> +    nor         a3, zero, t3
> +
> +    orn         t2, t2, t1
> +    sub.d       t0, t2, a2
> +    nor         t1, t2, a3
> +    and         t0, t0, t1
> +
> +
> +    bnez        t0, L(count_pos)
> +    addi.d      a0, a0, 8
> +L(loop_16_7bit):
> +    ld.d        t2, a0, 0
> +    sub.d       t1, t2, a2
> +
> +    and         t0, t1, t3
> +    bnez        t0, L(more_check)
> +    ld.d        t2, a0, 8
> +    sub.d       t1, t2, a2
> +
> +    and         t0, t1, t3
> +    addi.d      a0, a0, 16
> +    beqz        t0, L(loop_16_7bit)
> +    addi.d      a0, a0, -8
> +
> +L(more_check):
> +    nor         t0, t2, a3
> +    and         t0, t1, t0
> +    bnez        t0, L(count_pos)
> +    addi.d      a0, a0, 8
> +
> +
> +L(loop_16_8bit):
> +    ld.d        t2, a0, 0
> +    sub.d       t1, t2, a2
> +    nor         t0, t2, a3
> +    and         t0, t0, t1
> +
> +    bnez        t0, L(count_pos)
> +    ld.d        t2, a0, 8
> +    addi.d      a0, a0, 16
> +    sub.d       t1, t2, a2
> +
> +    nor         t0, t2, a3
> +    and         t0, t0, t1
> +    beqz        t0, L(loop_16_8bit)
> +    addi.d      a0, a0, -8
> +
> +L(count_pos):
> +    ctz.d       t1, t0
> +    sub.d       a0, a0, a1
> +    srli.d      t1, t1, 3
> +    add.d       a0, a0, t1
> +
> +    jr          ra
> +END(STRLEN)
> +
> +#ifdef _LIBC
> +libc_hidden_builtin_def (STRLEN)
> +#endif
> diff --git a/sysdeps/loongarch/lp64/multiarch/strlen-lasx.S b/sysdeps/loongarch/lp64/multiarch/strlen-lasx.S
> new file mode 100644
> index 0000000000..56ac6403d3
> --- /dev/null
> +++ b/sysdeps/loongarch/lp64/multiarch/strlen-lasx.S
> @@ -0,0 +1,65 @@

Missing one line comment.

> +/* Copyright (C) 2017-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
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#include <sysdep.h>
> +#include <sys/regdef.h>
> +#include <sys/asm.h>
> +
> +#if IS_IN (libc)
> +
> +# define STRLEN __strlen_lasx
> +
> +LEAF(STRLEN, 6)
> +    move            a1, a0
> +    bstrins.d       a0, zero, 4, 0
> +    li.d            t1, -1
> +    xvld            xr0, a0, 0
> +
> +    xvmsknz.b       xr0, xr0
> +    xvpickve.w      xr1, xr0, 4
> +    vilvl.h         vr0, vr1, vr0
> +    movfr2gr.s      t0, fa0  # sign extend
> +
> +    sra.w           t0, t0, a1
> +    beq             t0, t1, L(loop)
> +    cto.w           a0, t0
> +    jr              ra
> +
> +L(loop):
> +    xvld            xr0, a0, 32
> +    addi.d          a0, a0, 32
> +    xvsetanyeqz.b   fcc0, xr0
> +    bceqz           fcc0, L(loop)
> +
> +
> +    xvmsknz.b       xr0, xr0
> +    sub.d           a0, a0, a1
> +    xvpickve.w      xr1, xr0, 4
> +    vilvl.h         vr0, vr1, vr0
> +
> +    movfr2gr.s      t0, fa0
> +    cto.w           t0, t0
> +    add.d           a0, a0, t0
> +    jr              ra
> +END(STRLEN)
> +
> +#ifdef _LIBC
> +libc_hidden_builtin_def (STRLEN)
> +#endif
> +
> +#endif

This implementation fails to assembler with binutils 2.40.0.20230525:

../sysdeps/loongarch/lp64/multiarch/strlen-lasx.S:31: Error: no match insn: xvld        $xr0,$r4,0
../sysdeps/loongarch/lp64/multiarch/strlen-lasx.S:33: Error: no match insn: xvmsknz.b   $xr0,$xr0
../sysdeps/loongarch/lp64/multiarch/strlen-lasx.S:34: Error: no match insn: xvpickve.w  $xr1,$xr0,4
../sysdeps/loongarch/lp64/multiarch/strlen-lasx.S:35: Error: no match insn: vilvl.h     $vr0,$vr1,$vr0
../sysdeps/loongarch/lp64/multiarch/strlen-lasx.S:44: Error: no match insn: xvld        $xr0,$r4,32
../sysdeps/loongarch/lp64/multiarch/strlen-lasx.S:46: Error: no match insn: xvsetanyeqz.b       $fcc0,$xr0
../sysdeps/loongarch/lp64/multiarch/strlen-lasx.S:50: Error: no match insn: xvmsknz.b   $xr0,$xr0
../sysdeps/loongarch/lp64/multiarch/strlen-lasx.S:52: Error: no match insn: xvpickve.w  $xr1,$xr0,4
../sysdeps/loongarch/lp64/multiarch/strlen-lasx.S:53: Error: no match insn: vilvl.h     $vr0,$vr1,$vr0

You need to either add a configure option to increase the minimum required
binutils or add a macro to synthetize the instruction on older binutils
(similar to what sysdeps/powerpc/powerpc64/le/power9/strncmp.S does).


> diff --git a/sysdeps/loongarch/lp64/multiarch/strlen-lsx.S b/sysdeps/loongarch/lp64/multiarch/strlen-lsx.S
> new file mode 100644
> index 0000000000..1c19c98b5b
> --- /dev/null
> +++ b/sysdeps/loongarch/lp64/multiarch/strlen-lsx.S
> @@ -0,0 +1,73 @@
> +/* Copyright (C) 2017-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
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#include <sysdep.h>
> +#include <sys/regdef.h>
> +#include <sys/asm.h>
> +
> +#if IS_IN (libc)
> +
> +# define STRLEN __strlen_lsx
> +
> +LEAF(STRLEN, 6)
> +    move            a1, a0
> +    bstrins.d       a0, zero, 4, 0
> +    vld             vr0, a0, 0
> +    vld             vr1, a0, 16
> +
> +    li.d            t1, -1
> +    vmsknz.b        vr0, vr0
> +    vmsknz.b        vr1, vr1
> +    vilvl.h         vr0, vr1, vr0
> +
> +    movfr2gr.s      t0, fa0
> +    sra.w           t0, t0, a1
> +    beq             t0, t1, L(loop)
> +    cto.w           a0, t0
> +
> +    jr              ra
> +    nop
> +    nop
> +    nop
> +
> +
> +L(loop):
> +    vld             vr0, a0, 32
> +    vld             vr1, a0, 48
> +    addi.d          a0, a0, 32
> +    vmin.bu         vr2, vr0, vr1
> +
> +    vsetanyeqz.b    fcc0, vr2
> +    bceqz           fcc0, L(loop)
> +    vmsknz.b        vr0, vr0
> +    vmsknz.b        vr1, vr1
> +
> +    vilvl.h         vr0, vr1, vr0
> +    sub.d           a0, a0, a1
> +    movfr2gr.s      t0, fa0
> +    cto.w           t0, t0
> +
> +    add.d           a0, a0, t0
> +    jr              ra
> +END(STRLEN)
> +
> +#ifdef _LIBC
> +libc_hidden_builtin_def (STRLEN)
> +#endif
> +
> +#endif

This implementation fails to assembler with binutils 2.40.0.20230525:

../sysdeps/loongarch/lp64/multiarch/strlen-lsx.S: Assembler messages:
../sysdeps/loongarch/lp64/multiarch/strlen-lsx.S:30: Error: no match insn: vld  $vr0,$r4,0
../sysdeps/loongarch/lp64/multiarch/strlen-lsx.S:31: Error: no match insn: vld  $vr1,$r4,16
../sysdeps/loongarch/lp64/multiarch/strlen-lsx.S:34: Error: no match insn: vmsknz.b     $vr0,$vr0
../sysdeps/loongarch/lp64/multiarch/strlen-lsx.S:35: Error: no match insn: vmsknz.b     $vr1,$vr1
../sysdeps/loongarch/lp64/multiarch/strlen-lsx.S:36: Error: no match insn: vilvl.h      $vr0,$vr1,$vr0
../sysdeps/loongarch/lp64/multiarch/strlen-lsx.S:50: Error: no match insn: vld  $vr0,$r4,32
../sysdeps/loongarch/lp64/multiarch/strlen-lsx.S:51: Error: no match insn: vld  $vr1,$r4,48
../sysdeps/loongarch/lp64/multiarch/strlen-lsx.S:53: Error: no match insn: vmin.bu      $vr2,$vr0,$vr1
../sysdeps/loongarch/lp64/multiarch/strlen-lsx.S:55: Error: no match insn: vsetanyeqz.b $fcc0,$vr2
../sysdeps/loongarch/lp64/multiarch/strlen-lsx.S:57: Error: no match insn: vmsknz.b     $vr0,$vr0
../sysdeps/loongarch/lp64/multiarch/strlen-lsx.S:58: Error: no match insn: vmsknz.b     $vr1,$vr1
../sysdeps/loongarch/lp64/multiarch/strlen-lsx.S:60: Error: no match insn: vilvl.h      $vr0,$vr1,$vr0

> diff --git a/sysdeps/loongarch/lp64/multiarch/strlen.c b/sysdeps/loongarch/lp64/multiarch/strlen.c
> new file mode 100644
> index 0000000000..416ed0d9e2
> --- /dev/null
> +++ b/sysdeps/loongarch/lp64/multiarch/strlen.c
> @@ -0,0 +1,37 @@
> +/* Multiple versions of strlen.
> +   All versions must be listed in ifunc-impl-list.c.
> +   Copyright (C) 2017-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
> +   <https://www.gnu.org/licenses/>.  */
> +
> +/* Define multiple versions only for the definition in libc.  */
> +
> +#if IS_IN (libc)
> +# define strlen __redirect_strlen
> +# include <string.h>
> +# undef strlen
> +
> +# define SYMBOL_NAME strlen
> +# include "ifunc-strlen.h"
> +
> +libc_ifunc_redirected (__redirect_strlen, strlen, IFUNC_SELECTOR ());
> +
> +# ifdef SHARED
> +__hidden_ver1 (strlen, __GI_strlen, __redirect_strlen)
> +  __attribute__ ((visibility ("hidden"))) __attribute_copy__ (strlen);
> +# endif
> +
> +#endif
> diff --git a/sysdeps/loongarch/sys/regdef.h b/sysdeps/loongarch/sys/regdef.h
> index 5100f36d24..524d2e3277 100644
> --- a/sysdeps/loongarch/sys/regdef.h
> +++ b/sysdeps/loongarch/sys/regdef.h
> @@ -89,6 +89,14 @@
>  #define fs5 $f29
>  #define fs6 $f30
>  #define fs7 $f31
> +#define fcc0 $fcc0
> +#define fcc1 $fcc1
> +#define fcc2 $fcc2
> +#define fcc3 $fcc3
> +#define fcc4 $fcc4
> +#define fcc5 $fcc5
> +#define fcc6 $fcc6
> +#define fcc7 $fcc7
>  
>  #define vr0 $vr0
>  #define vr1 $vr1
> @@ -98,6 +106,30 @@
>  #define vr5 $vr5
>  #define vr6 $vr6
>  #define vr7 $vr7
> +#define vr8 $vr8
> +#define vr9 $vr9
> +#define vr10 $vr10
> +#define vr11 $vr11
> +#define vr12 $vr12
> +#define vr13 $vr13
> +#define vr14 $vr14
> +#define vr15 $vr15
> +#define vr16 $vr16
> +#define vr17 $vr17
> +#define vr18 $vr18
> +#define vr19 $vr19
> +#define vr20 $vr20
> +#define vr21 $vr21
> +#define vr22 $vr22
> +#define vr23 $vr23
> +#define vr24 $vr24
> +#define vr25 $vr25
> +#define vr26 $vr26
> +#define vr27 $vr27
> +#define vr28 $vr28
> +#define vr29 $vr29
> +#define vr30 $vr30
> +#define vr31 $vr31
>  
>  #define xr0 $xr0
>  #define xr1 $xr1
> @@ -107,5 +139,30 @@
>  #define xr5 $xr5
>  #define xr6 $xr6
>  #define xr7 $xr7
> +#define xr7 $xr7
> +#define xr8 $xr8
> +#define xr9 $xr9
> +#define xr10 $xr10
> +#define xr11 $xr11
> +#define xr12 $xr12
> +#define xr13 $xr13
> +#define xr14 $xr14
> +#define xr15 $xr15
> +#define xr16 $xr16
> +#define xr17 $xr17
> +#define xr18 $xr18
> +#define xr19 $xr19
> +#define xr20 $xr20
> +#define xr21 $xr21
> +#define xr22 $xr22
> +#define xr23 $xr23
> +#define xr24 $xr24
> +#define xr25 $xr25
> +#define xr26 $xr26
> +#define xr27 $xr27
> +#define xr28 $xr28
> +#define xr29 $xr29
> +#define xr30 $xr30
> +#define xr31 $xr31
>  
>  #endif /* _SYS_REGDEF_H */
> diff --git a/sysdeps/unix/sysv/linux/loongarch/cpu-features.h b/sysdeps/unix/sysv/linux/loongarch/cpu-features.h
> index e371e13b15..d1a280a5ee 100644
> --- a/sysdeps/unix/sysv/linux/loongarch/cpu-features.h
> +++ b/sysdeps/unix/sysv/linux/loongarch/cpu-features.h
> @@ -25,5 +25,7 @@
>  #define SUPPORT_LSX (GLRO (dl_hwcap) & HWCAP_LOONGARCH_LSX)
>  #define SUPPORT_LASX (GLRO (dl_hwcap) & HWCAP_LOONGARCH_LASX)
>  
> +#define INIT_ARCH()
> +
>  #endif /* _CPU_FEATURES_LOONGARCH64_H  */
>  

  reply	other threads:[~2023-08-01 14:31 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-01  7:09 [PATCH 0/2] Add ifunc support and " dengjianbo
2023-08-01  7:09 ` [PATCH 1/2] LoongArch: Redefine macro LEAF/ENTRY dengjianbo
2023-08-01  7:09 ` [PATCH 2/2] Loongarch: Add ifunc support and add different versions of strlen dengjianbo
2023-08-01 14:31   ` Adhemerval Zanella Netto [this message]
2023-08-02  1:25     ` caiyinyu
2023-08-02 12:25       ` dengjianbo
2023-08-02 12:59         ` Adhemerval Zanella Netto
2023-08-03 13:27           ` dengjianbo
2023-08-03 13:48             ` Adhemerval Zanella Netto
2023-08-03 14:53               ` Xi Ruoyao
2023-08-03 14:59                 ` Xi Ruoyao
2023-08-03 16:29                   ` Adhemerval Zanella Netto
2023-08-04  1:50                 ` caiyinyu
2023-08-04 10:00               ` dengjianbo
2023-08-01 14:44   ` Xi Ruoyao
2023-08-02 12:47     ` dengjianbo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8367cd72-e458-7a1c-63af-01280d8ccc7a@linaro.org \
    --to=adhemerval.zanella@linaro.org \
    --cc=caiyinyu@loongson.cn \
    --cc=dengjianbo@loongson.cn \
    --cc=huangpei@loongson.cn \
    --cc=libc-alpha@sourceware.org \
    --cc=xry111@xry111.site \
    --cc=xuchenghua@loongson.cn \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).