|
@@ -0,0 +1,297 @@
|
|
|
+From 0dfcc83599765108e12ab6630a16bd27adae2b6a Mon Sep 17 00:00:00 2001
|
|
|
+From: "max.ma" <max.ma@starfivetech.com>
|
|
|
+Date: Thu, 16 Mar 2023 00:22:15 -0700
|
|
|
+Subject: [PATCH 2/2] [RISCV] revert strchrnul/strncmp/strnlen
|
|
|
+
|
|
|
+---
|
|
|
+ .../riscv/rv64/multiarch/ifunc-impl-list.c | 11 ---
|
|
|
+ sysdeps/riscv/rv64/multiarch/rtld-strchrnul.S | 1 -
|
|
|
+ sysdeps/riscv/rv64/multiarch/rtld-strncmp.S | 1 -
|
|
|
+ sysdeps/riscv/rv64/strchrnul.S | 80 -------------------
|
|
|
+ sysdeps/riscv/rv64/strncmp.S | 74 -----------------
|
|
|
+ sysdeps/riscv/rv64/strnlen.S | 65 ---------------
|
|
|
+ 6 files changed, 232 deletions(-)
|
|
|
+ delete mode 100644 sysdeps/riscv/rv64/multiarch/rtld-strchrnul.S
|
|
|
+ delete mode 100644 sysdeps/riscv/rv64/multiarch/rtld-strncmp.S
|
|
|
+ delete mode 100644 sysdeps/riscv/rv64/strchrnul.S
|
|
|
+ delete mode 100644 sysdeps/riscv/rv64/strncmp.S
|
|
|
+ delete mode 100644 sysdeps/riscv/rv64/strnlen.S
|
|
|
+
|
|
|
+diff --git a/sysdeps/riscv/rv64/multiarch/ifunc-impl-list.c b/sysdeps/riscv/rv64/multiarch/ifunc-impl-list.c
|
|
|
+index 7bba6fa30c..07d584deec 100644
|
|
|
+--- a/sysdeps/riscv/rv64/multiarch/ifunc-impl-list.c
|
|
|
++++ b/sysdeps/riscv/rv64/multiarch/ifunc-impl-list.c
|
|
|
+@@ -61,17 +61,6 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
|
|
|
+ IFUNC_IMPL_ADD (array, i, memset, use_rvv, __memset_vector)
|
|
|
+ IFUNC_IMPL_ADD (array, i, memset, 1, __memset_riscv));
|
|
|
+
|
|
|
+- IFUNC_IMPL (i, name, strchr,
|
|
|
+- IFUNC_IMPL_ADD (array, i, strchr, use_rvv, __strchr_riscv)
|
|
|
+- IFUNC_IMPL_ADD (array, i, strchr, 1, __strchr_riscv));
|
|
|
+-
|
|
|
+- IFUNC_IMPL (i, name, strchrnul,
|
|
|
+- IFUNC_IMPL_ADD (array, i, strchrnul, use_rvv, __strchrnul_riscv)
|
|
|
+- IFUNC_IMPL_ADD (array, i, strchrnul, 1, __strchrnul_riscv));
|
|
|
+-
|
|
|
+- IFUNC_IMPL (i, name, strncmp,
|
|
|
+- IFUNC_IMPL_ADD (array, i, strncmp, use_rvv, __strncmp_riscv)
|
|
|
+- IFUNC_IMPL_ADD (array, i, strncmp, 1, __strncmp_riscv));
|
|
|
+ #endif
|
|
|
+ return i;
|
|
|
+ }
|
|
|
+diff --git a/sysdeps/riscv/rv64/multiarch/rtld-strchrnul.S b/sysdeps/riscv/rv64/multiarch/rtld-strchrnul.S
|
|
|
+deleted file mode 100644
|
|
|
+index 5799994393..0000000000
|
|
|
+--- a/sysdeps/riscv/rv64/multiarch/rtld-strchrnul.S
|
|
|
++++ /dev/null
|
|
|
+@@ -1 +0,0 @@
|
|
|
+-#include "../strchrnul.S"
|
|
|
+diff --git a/sysdeps/riscv/rv64/multiarch/rtld-strncmp.S b/sysdeps/riscv/rv64/multiarch/rtld-strncmp.S
|
|
|
+deleted file mode 100644
|
|
|
+index c5a02a137c..0000000000
|
|
|
+--- a/sysdeps/riscv/rv64/multiarch/rtld-strncmp.S
|
|
|
++++ /dev/null
|
|
|
+@@ -1 +0,0 @@
|
|
|
+-#include "../strncmp.S"
|
|
|
+diff --git a/sysdeps/riscv/rv64/strchrnul.S b/sysdeps/riscv/rv64/strchrnul.S
|
|
|
+deleted file mode 100644
|
|
|
+index 6cf125cf46..0000000000
|
|
|
+--- a/sysdeps/riscv/rv64/strchrnul.S
|
|
|
++++ /dev/null
|
|
|
+@@ -1,80 +0,0 @@
|
|
|
+-/* The assembly function for strchrnul. RISC-V version.
|
|
|
+- Copyright (C) 2018 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
|
|
|
+- <http://www.gnu.org/licenses/>. */
|
|
|
+-
|
|
|
+-#include <sysdep.h>
|
|
|
+-
|
|
|
+- .p2align 6
|
|
|
+-ENTRY (__strchrnul)
|
|
|
+- andi a1, a1, 0xff
|
|
|
+-
|
|
|
+-.Lmisaligned:
|
|
|
+- andi a5, a0, 7
|
|
|
+- beqz a5, .Laligned
|
|
|
+- lbu a5, 0(a0)
|
|
|
+- beq a5, a1, .Ldone
|
|
|
+- beqz a5, .Ldone
|
|
|
+- addi a0, a0, 1
|
|
|
+- j .Lmisaligned
|
|
|
+-
|
|
|
+-.Laligned:
|
|
|
+- slli a5, a1, 0x8
|
|
|
+- or a5, a5, a1
|
|
|
+- slli t0, a5, 0x10
|
|
|
+- or t0, t0, a5
|
|
|
+- slli a5, t0, 0x20
|
|
|
+- or t0, t0, a5
|
|
|
+-
|
|
|
+- li a5, -1
|
|
|
+- addi a0, a0, -8
|
|
|
+- .p2align 3
|
|
|
+-.Lloop:
|
|
|
+- addi a0, a0, 8
|
|
|
+- ld a2, 0(a0)
|
|
|
+- orc.b t1, a2
|
|
|
+- bne t1, a5, .Lnull
|
|
|
+- xor a3, a2, t0
|
|
|
+- orc.b a3, a3
|
|
|
+- bne a3, a5, .Lfind
|
|
|
+- orc.b a2, a2
|
|
|
+- beq a2, a5, .Lloop
|
|
|
+-
|
|
|
+-.Ldone:
|
|
|
+- ret
|
|
|
+-
|
|
|
+-.Lfind:
|
|
|
+- not a3, a3
|
|
|
+- ctz a3, a3
|
|
|
+- srli a3, a3, 3
|
|
|
+- add a0, a0, a3
|
|
|
+- ret
|
|
|
+-
|
|
|
+-# cases in which a null byte was detected
|
|
|
+-.Lnull:
|
|
|
+- bne a2, t0, .Lend
|
|
|
+- j .Lfind
|
|
|
+-
|
|
|
+-.Lend:
|
|
|
+- lbu a5, 0(a0)
|
|
|
+- beq a5, a1, .Ldone
|
|
|
+- beqz a5, .Ldone
|
|
|
+- addi a0, a0, 1
|
|
|
+- j .Lend
|
|
|
+-
|
|
|
+-END (__strchrnul)
|
|
|
+-weak_alias (__strchrnul,strchrnul)
|
|
|
+-libc_hidden_builtin_def (__strchrnul)
|
|
|
+\ No newline at end of file
|
|
|
+diff --git a/sysdeps/riscv/rv64/strncmp.S b/sysdeps/riscv/rv64/strncmp.S
|
|
|
+deleted file mode 100644
|
|
|
+index 200bee4fe1..0000000000
|
|
|
+--- a/sysdeps/riscv/rv64/strncmp.S
|
|
|
++++ /dev/null
|
|
|
+@@ -1,74 +0,0 @@
|
|
|
+-/* The assembly function for strncmp. RISC-V version.
|
|
|
+- Copyright (C) 2018 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
|
|
|
+- <http://www.gnu.org/licenses/>. */
|
|
|
+-
|
|
|
+-#include <sysdep.h>
|
|
|
+-
|
|
|
+- .p2align 6
|
|
|
+-ENTRY (strncmp)
|
|
|
+- beqz a2, .Lequal
|
|
|
+- or a4, a0, a1
|
|
|
+- li t2, -1
|
|
|
+- and a4, a4, 7
|
|
|
+- beqz a4, .Lenter
|
|
|
+- j .Lmisaligned
|
|
|
+-
|
|
|
+- .p2align 3
|
|
|
+-.Lloop:
|
|
|
+- addi a0, a0, 8
|
|
|
+- addi a1, a1, 8
|
|
|
+- addi a2, a2, -8
|
|
|
+-
|
|
|
+-.Lenter:
|
|
|
+- addi a5, a2, -8
|
|
|
+- blez a5, .Lmisaligned
|
|
|
+- ld a3, 0(a0)
|
|
|
+- ld a4, 0(a1)
|
|
|
+- orc.b t0, a3
|
|
|
+- bne t0, t2, .Lnull
|
|
|
+- beq a3, a4, .Lloop
|
|
|
+- rev8 a6, a3
|
|
|
+- rev8 a7, a4
|
|
|
+- bgeu a6, a7, 1f
|
|
|
+- li a0, -1
|
|
|
+- ret
|
|
|
+-1:
|
|
|
+- li a0, 1
|
|
|
+- ret
|
|
|
+-
|
|
|
+-.Lmisaligned:
|
|
|
+- blez a2, .Ldone
|
|
|
+- lbu a3, 0(a0)
|
|
|
+- lbu a4, 0(a1)
|
|
|
+- addi a0, a0, 1
|
|
|
+- addi a1, a1, 1
|
|
|
+- addi a2, a2, -1
|
|
|
+- bne a3, a4, .Ldone
|
|
|
+- bnez a3, .Lmisaligned
|
|
|
+-.Ldone:
|
|
|
+- sub a0, a3, a4
|
|
|
+- ret
|
|
|
+-
|
|
|
+-# cases in which a null byte was detected
|
|
|
+-.Lnull:
|
|
|
+- bne a3, a4, .Lmisaligned
|
|
|
+-.Lequal:
|
|
|
+- li a0, 0
|
|
|
+- ret
|
|
|
+-
|
|
|
+-END (strncmp)
|
|
|
+-libc_hidden_builtin_def (strncmp)
|
|
|
+\ No newline at end of file
|
|
|
+diff --git a/sysdeps/riscv/rv64/strnlen.S b/sysdeps/riscv/rv64/strnlen.S
|
|
|
+deleted file mode 100644
|
|
|
+index 502f108710..0000000000
|
|
|
+--- a/sysdeps/riscv/rv64/strnlen.S
|
|
|
++++ /dev/null
|
|
|
+@@ -1,65 +0,0 @@
|
|
|
+-/* The assembly function for strnlen. RISC-V version.
|
|
|
+- Copyright (C) 2018 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
|
|
|
+- <http://www.gnu.org/licenses/>. */
|
|
|
+-
|
|
|
+-#include <sysdep.h>
|
|
|
+-
|
|
|
+- .p2align 6
|
|
|
+-ENTRY (__strnlen)
|
|
|
+- mv a2, a0
|
|
|
+- mv a0, a1
|
|
|
+- li a3, -1
|
|
|
+- beqz a1, .Ldone
|
|
|
+- add a0, a2, a1
|
|
|
+- bleu a2, a0, 1f
|
|
|
+- li a0, -1
|
|
|
+-1:
|
|
|
+- mv a5, a2
|
|
|
+-
|
|
|
+-.Lmisaligned:
|
|
|
+- andi a4, a5, 7
|
|
|
+- beqz a4, .Lloop
|
|
|
+- lbu a4, 0(a5)
|
|
|
+- beqz a4, .Llenth
|
|
|
+- addi a5, a5, 1
|
|
|
+- j .Lmisaligned
|
|
|
+-.p2align 3
|
|
|
+-.Laligned:
|
|
|
+- addi a5, a5, 8
|
|
|
+- addi a1, a1, -8
|
|
|
+-.Lloop:
|
|
|
+- bleu a1, x0, .Llenth
|
|
|
+- ld a4, 0(a5)
|
|
|
+- orc.b a4, a4
|
|
|
+- beq a4, a3, .Laligned
|
|
|
+- not a4, a4
|
|
|
+- ctz a4, a4
|
|
|
+- srli a4, a4, 3
|
|
|
+- add a5, a5, a4
|
|
|
+-.Llenth:
|
|
|
+- minu a5, a5, a0
|
|
|
+- sub a0, a5, a2
|
|
|
+-.Ldone:
|
|
|
+- ret
|
|
|
+-
|
|
|
+-END (__strnlen)
|
|
|
+-
|
|
|
+-#ifndef STRNLEN
|
|
|
+-libc_hidden_def (__strnlen)
|
|
|
+-weak_alias (__strnlen, strnlen)
|
|
|
+-#endif
|
|
|
+-libc_hidden_def (strnlen)
|
|
|
+--
|
|
|
+2.25.1
|
|
|
+
|