Merge "Implement rvv version mem* and str* for riscv64" am: 81e8402db3
am: b740d38e83
am: 34afd17415
Original change: https://android-review.googlesource.com/c/platform/bionic/+/2606625 Change-Id: I3ae7f71d8f1eda16de833222a28fb018e8209b9b Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
commit
7691b59101
19 changed files with 1803 additions and 0 deletions
|
@ -932,6 +932,21 @@ cc_library_static {
|
|||
"arch-riscv64/bionic/setjmp.S",
|
||||
"arch-riscv64/bionic/syscall.S",
|
||||
"arch-riscv64/bionic/vfork.S",
|
||||
|
||||
"arch-riscv64/string/memchr_vext.S",
|
||||
"arch-riscv64/string/memcmp_vext.S",
|
||||
"arch-riscv64/string/memcpy_vext.S",
|
||||
"arch-riscv64/string/memmove_vext.S",
|
||||
"arch-riscv64/string/memset_vext.S",
|
||||
"arch-riscv64/string/strcat_vext.S",
|
||||
"arch-riscv64/string/strchr_vext.S",
|
||||
"arch-riscv64/string/strcmp_vext.S",
|
||||
"arch-riscv64/string/strcpy_vext.S",
|
||||
"arch-riscv64/string/strlen_vext.S",
|
||||
"arch-riscv64/string/strncat_vext.S",
|
||||
"arch-riscv64/string/strncmp_vext.S",
|
||||
"arch-riscv64/string/strncpy_vext.S",
|
||||
"arch-riscv64/string/strnlen_vext.S",
|
||||
],
|
||||
},
|
||||
|
||||
|
@ -1541,6 +1556,9 @@ cc_library_static {
|
|||
arm64: {
|
||||
srcs: ["arch-arm64/static_function_dispatch.S"],
|
||||
},
|
||||
riscv64: {
|
||||
srcs: ["arch-riscv64/static_function_dispatch.S"]
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -1569,6 +1587,9 @@ cc_library_static {
|
|||
arm64: {
|
||||
srcs: ["arch-arm64/dynamic_function_dispatch.cpp"],
|
||||
},
|
||||
riscv64: {
|
||||
srcs: ["arch-riscv64/dynamic_function_dispatch.cpp"]
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
|
|
28
libc/NOTICE
28
libc/NOTICE
|
@ -4540,6 +4540,34 @@ SUCH DAMAGE.
|
|||
|
||||
-------------------------------------------------------------------
|
||||
|
||||
Copyright (c) 2023 SiFive, Inc.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
3. The name of the company may not be used to endorse or promote
|
||||
products derived from this software without specific prior written
|
||||
permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY SIFIVE INC ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL SIFIVE INC BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
|
||||
Copyright (c)1999 Citrus Project,
|
||||
All rights reserved.
|
||||
|
||||
|
|
107
libc/arch-riscv64/dynamic_function_dispatch.cpp
Normal file
107
libc/arch-riscv64/dynamic_function_dispatch.cpp
Normal file
|
@ -0,0 +1,107 @@
|
|||
/*
|
||||
* Copyright (C) 2023 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <private/bionic_ifuncs.h>
|
||||
#include <stddef.h>
|
||||
#include <sys/auxv.h>
|
||||
|
||||
#if defined(__riscv_v)
|
||||
extern "C" {
|
||||
|
||||
typedef void* memchr_func(const void*, int, size_t);
|
||||
DEFINE_IFUNC_FOR(memchr) {
|
||||
RETURN_FUNC(memchr_func, memchr_vext);
|
||||
}
|
||||
|
||||
typedef int memcmp_func(const void*, const void*, size_t);
|
||||
DEFINE_IFUNC_FOR(memcmp) {
|
||||
RETURN_FUNC(memcmp_func, memcmp_vext);
|
||||
}
|
||||
|
||||
typedef void* memcpy_func(void*, const void*, size_t);
|
||||
DEFINE_IFUNC_FOR(memcpy) {
|
||||
RETURN_FUNC(memcpy_func, memcpy_vext);
|
||||
}
|
||||
|
||||
typedef void* memmove_func(void*, const void*, size_t);
|
||||
DEFINE_IFUNC_FOR(memmove) {
|
||||
RETURN_FUNC(memmove_func, memmove_vext);
|
||||
}
|
||||
|
||||
typedef void* memset_func(void*, int, size_t);
|
||||
DEFINE_IFUNC_FOR(memset) {
|
||||
RETURN_FUNC(memset_func, memset_vext);
|
||||
}
|
||||
|
||||
typedef char* strcat_func(char*, const char*);
|
||||
DEFINE_IFUNC_FOR(strcat) {
|
||||
RETURN_FUNC(strcat_func, strcat_vext);
|
||||
}
|
||||
|
||||
typedef char* strchr_func(const char*, int);
|
||||
DEFINE_IFUNC_FOR(strchr) {
|
||||
RETURN_FUNC(strchr_func, strchr_vext);
|
||||
}
|
||||
|
||||
typedef int strcmp_func(const char*, const char*);
|
||||
DEFINE_IFUNC_FOR(strcmp) {
|
||||
RETURN_FUNC(strcmp_func, strcmp_vext);
|
||||
}
|
||||
|
||||
typedef char* strcpy_func(char*, const char*);
|
||||
DEFINE_IFUNC_FOR(strcpy) {
|
||||
RETURN_FUNC(strcpy_func, strcpy_vext);
|
||||
}
|
||||
|
||||
typedef size_t strlen_func(const char*);
|
||||
DEFINE_IFUNC_FOR(strlen) {
|
||||
RETURN_FUNC(strlen_func, strlen_vext);
|
||||
}
|
||||
|
||||
typedef char* strncat_func(char*, const char*, size_t);
|
||||
DEFINE_IFUNC_FOR(strncat) {
|
||||
RETURN_FUNC(strncat_func, strncat_vext);
|
||||
}
|
||||
|
||||
typedef int strncmp_func(const char*, const char*, size_t);
|
||||
DEFINE_IFUNC_FOR(strncmp) {
|
||||
RETURN_FUNC(strncmp_func, strncmp_vext);
|
||||
}
|
||||
|
||||
typedef char* strncpy_func(char*, const char*, size_t);
|
||||
DEFINE_IFUNC_FOR(strncpy) {
|
||||
RETURN_FUNC(strncpy_func, strncpy_vext);
|
||||
}
|
||||
|
||||
typedef size_t strnlen_func(const char*, size_t);
|
||||
DEFINE_IFUNC_FOR(strnlen) {
|
||||
RETURN_FUNC(strnlen_func, strnlen_vext);
|
||||
}
|
||||
|
||||
} // extern "C"
|
||||
#endif
|
55
libc/arch-riscv64/static_function_dispatch.S
Normal file
55
libc/arch-riscv64/static_function_dispatch.S
Normal file
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
* Copyright (C) 2023 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <private/bionic_asm.h>
|
||||
|
||||
#define FUNCTION_DELEGATE(name, impl) \
|
||||
ENTRY(name); \
|
||||
j impl; \
|
||||
END(name)
|
||||
|
||||
#if defined(__riscv_v)
|
||||
|
||||
FUNCTION_DELEGATE(memchr, memchr_vext)
|
||||
FUNCTION_DELEGATE(memcmp, memcmp_vext)
|
||||
FUNCTION_DELEGATE(memcpy, memcpy_vext)
|
||||
FUNCTION_DELEGATE(memmove, memmove_vext)
|
||||
FUNCTION_DELEGATE(memset, memset_vext)
|
||||
FUNCTION_DELEGATE(strcat, strcat_vext)
|
||||
FUNCTION_DELEGATE(strchr, strchr_vext)
|
||||
FUNCTION_DELEGATE(strcmp, strcmp_vext)
|
||||
FUNCTION_DELEGATE(strcpy, strcpy_vext)
|
||||
FUNCTION_DELEGATE(strlen, strlen_vext)
|
||||
FUNCTION_DELEGATE(strncat, strncat_vext)
|
||||
FUNCTION_DELEGATE(strncmp, strncmp_vext)
|
||||
FUNCTION_DELEGATE(strncpy, strncpy_vext)
|
||||
FUNCTION_DELEGATE(strnlen, strnlen_vext)
|
||||
|
||||
#endif
|
||||
|
||||
NOTE_GNU_PROPERTY()
|
100
libc/arch-riscv64/string/memchr_vext.S
Normal file
100
libc/arch-riscv64/string/memchr_vext.S
Normal file
|
@ -0,0 +1,100 @@
|
|||
/*
|
||||
* Copyright (C) 2023 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2023 SiFive, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the company may not be used to endorse or promote
|
||||
* products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY SIFIVE INC ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL SIFIVE INC BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(__riscv_v)
|
||||
|
||||
#include "sys/asm.h"
|
||||
|
||||
#define iResult a0
|
||||
|
||||
#define pSrc a0
|
||||
#define iValue a1
|
||||
#define iNum a2
|
||||
|
||||
#define iVL a3
|
||||
#define iTemp a4
|
||||
|
||||
#define ELEM_LMUL_SETTING m8
|
||||
#define vData v0
|
||||
#define vMask v8
|
||||
|
||||
ENTRY(memchr_vext)
|
||||
|
||||
L(loop):
|
||||
vsetvli iVL, iNum, e8, ELEM_LMUL_SETTING, ta, ma
|
||||
|
||||
vle8ff.v vData, (pSrc)
|
||||
vmseq.vx vMask, vData, iValue
|
||||
vfirst.m iTemp, vMask
|
||||
|
||||
# skip the loop if we find the matched value.
|
||||
bgez iTemp, L(found)
|
||||
|
||||
csrr iVL, vl
|
||||
sub iNum, iNum, iVL
|
||||
add pSrc, pSrc, iVL
|
||||
|
||||
bnez iNum, L(loop)
|
||||
|
||||
li iResult, 0
|
||||
ret
|
||||
|
||||
L(found):
|
||||
add iResult, pSrc, iTemp
|
||||
ret
|
||||
|
||||
END(memchr_vext)
|
||||
|
||||
#endif
|
110
libc/arch-riscv64/string/memcmp_vext.S
Normal file
110
libc/arch-riscv64/string/memcmp_vext.S
Normal file
|
@ -0,0 +1,110 @@
|
|||
/*
|
||||
* Copyright (C) 2023 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2023 SiFive, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the company may not be used to endorse or promote
|
||||
* products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY SIFIVE INC ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL SIFIVE INC BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(__riscv_v)
|
||||
|
||||
#include "sys/asm.h"
|
||||
|
||||
#define iResult a0
|
||||
|
||||
#define pSrc1 a0
|
||||
#define pSrc2 a1
|
||||
#define iNum a2
|
||||
|
||||
#define iVL a3
|
||||
#define iTemp a4
|
||||
#define iTemp1 a5
|
||||
#define iTemp2 a6
|
||||
|
||||
#define ELEM_LMUL_SETTING m8
|
||||
#define vData1 v0
|
||||
#define vData2 v8
|
||||
#define vMask v16
|
||||
|
||||
ENTRY(memcmp_vext)
|
||||
|
||||
L(loop):
|
||||
vsetvli iVL, iNum, e8, ELEM_LMUL_SETTING, ta, ma
|
||||
|
||||
vle8.v vData1, (pSrc1)
|
||||
vle8.v vData2, (pSrc2)
|
||||
|
||||
vmsne.vv vMask, vData1, vData2
|
||||
sub iNum, iNum, iVL
|
||||
vfirst.m iTemp, vMask
|
||||
|
||||
/* skip the loop if we find the different
|
||||
value between pSrc1 and pSrc2. */
|
||||
bgez iTemp, L(found)
|
||||
|
||||
add pSrc1, pSrc1, iVL
|
||||
add pSrc2, pSrc2, iVL
|
||||
|
||||
bnez iNum, L(loop)
|
||||
|
||||
li iResult, 0
|
||||
ret
|
||||
|
||||
L(found):
|
||||
add pSrc1, pSrc1, iTemp
|
||||
add pSrc2, pSrc2, iTemp
|
||||
lbu iTemp1, 0(pSrc1)
|
||||
lbu iTemp2, 0(pSrc2)
|
||||
sub iResult, iTemp1, iTemp2
|
||||
ret
|
||||
|
||||
END(memcmp_vext)
|
||||
|
||||
#endif
|
88
libc/arch-riscv64/string/memcpy_vext.S
Normal file
88
libc/arch-riscv64/string/memcpy_vext.S
Normal file
|
@ -0,0 +1,88 @@
|
|||
/*
|
||||
* Copyright (C) 2023 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2023 SiFive, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the company may not be used to endorse or promote
|
||||
* products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY SIFIVE INC ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL SIFIVE INC BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#if defined(__riscv_v)
|
||||
|
||||
#include "sys/asm.h"
|
||||
|
||||
#define pDst a0
|
||||
#define pSrc a1
|
||||
#define iNum a2
|
||||
|
||||
#define iVL a3
|
||||
#define pDstPtr a4
|
||||
|
||||
#define ELEM_LMUL_SETTING m8
|
||||
#define vData v0
|
||||
|
||||
ENTRY(memcpy_vext)
|
||||
|
||||
mv pDstPtr, pDst
|
||||
|
||||
L(loop):
|
||||
vsetvli iVL, iNum, e8, ELEM_LMUL_SETTING, ta, ma
|
||||
|
||||
vle8.v vData, (pSrc)
|
||||
sub iNum, iNum, iVL
|
||||
add pSrc, pSrc, iVL
|
||||
vse8.v vData, (pDstPtr)
|
||||
add pDstPtr, pDstPtr, iVL
|
||||
|
||||
bnez iNum, L(loop)
|
||||
|
||||
ret
|
||||
|
||||
END(memcpy_vext)
|
||||
|
||||
#endif
|
106
libc/arch-riscv64/string/memmove_vext.S
Normal file
106
libc/arch-riscv64/string/memmove_vext.S
Normal file
|
@ -0,0 +1,106 @@
|
|||
/*
|
||||
* Copyright (C) 2023 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2023 SiFive, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the company may not be used to endorse or promote
|
||||
* products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY SIFIVE INC ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL SIFIVE INC BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(__riscv_v)
|
||||
|
||||
#include "sys/asm.h"
|
||||
|
||||
#define pDst a0
|
||||
#define pSrc a1
|
||||
#define iNum a2
|
||||
|
||||
#define iVL a3
|
||||
#define pDstPtr a4
|
||||
#define pSrcBackwardPtr a5
|
||||
#define pDstBackwardPtr a6
|
||||
|
||||
#define ELEM_LMUL_SETTING m8
|
||||
#define vData v0
|
||||
|
||||
ENTRY(memmove_vext)
|
||||
|
||||
mv pDstPtr, pDst
|
||||
|
||||
bgeu pSrc, pDst, L(forward_copy_loop)
|
||||
add pSrcBackwardPtr, pSrc, iNum
|
||||
add pDstBackwardPtr, pDst, iNum
|
||||
bltu pDst, pSrcBackwardPtr, L(backward_copy_loop)
|
||||
|
||||
L(forward_copy_loop):
|
||||
vsetvli iVL, iNum, e8, ELEM_LMUL_SETTING, ta, ma
|
||||
|
||||
vle8.v vData, (pSrc)
|
||||
sub iNum, iNum, iVL
|
||||
add pSrc, pSrc, iVL
|
||||
vse8.v vData, (pDstPtr)
|
||||
add pDstPtr, pDstPtr, iVL
|
||||
|
||||
bnez iNum, L(forward_copy_loop)
|
||||
ret
|
||||
|
||||
L(backward_copy_loop):
|
||||
vsetvli iVL, iNum, e8, ELEM_LMUL_SETTING, ta, ma
|
||||
|
||||
sub pSrcBackwardPtr, pSrcBackwardPtr, iVL
|
||||
vle8.v vData, (pSrcBackwardPtr)
|
||||
sub iNum, iNum, iVL
|
||||
sub pDstBackwardPtr, pDstBackwardPtr, iVL
|
||||
vse8.v vData, (pDstBackwardPtr)
|
||||
bnez iNum, L(backward_copy_loop)
|
||||
ret
|
||||
|
||||
END(memmove_vext)
|
||||
|
||||
#endif
|
89
libc/arch-riscv64/string/memset_vext.S
Normal file
89
libc/arch-riscv64/string/memset_vext.S
Normal file
|
@ -0,0 +1,89 @@
|
|||
/*
|
||||
* Copyright (C) 2023 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2023 SiFive, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the company may not be used to endorse or promote
|
||||
* products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY SIFIVE INC ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL SIFIVE INC BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(__riscv_v)
|
||||
|
||||
#include "sys/asm.h"
|
||||
|
||||
#define pDst a0
|
||||
#define iValue a1
|
||||
#define iNum a2
|
||||
|
||||
#define iVL a3
|
||||
#define iTemp a4
|
||||
#define pDstPtr a5
|
||||
|
||||
#define ELEM_LMUL_SETTING m8
|
||||
#define vData v0
|
||||
|
||||
ENTRY(memset_vext)
|
||||
|
||||
mv pDstPtr, pDst
|
||||
|
||||
vsetvli iVL, iNum, e8, ELEM_LMUL_SETTING, ta, ma
|
||||
vmv.v.x vData, iValue
|
||||
|
||||
L(loop):
|
||||
vse8.v vData, (pDstPtr)
|
||||
sub iNum, iNum, iVL
|
||||
add pDstPtr, pDstPtr, iVL
|
||||
vsetvli iVL, iNum, e8, ELEM_LMUL_SETTING, ta, ma
|
||||
bnez iNum, L(loop)
|
||||
|
||||
ret
|
||||
|
||||
END(memset_vext)
|
||||
|
||||
#endif
|
111
libc/arch-riscv64/string/strcat_vext.S
Normal file
111
libc/arch-riscv64/string/strcat_vext.S
Normal file
|
@ -0,0 +1,111 @@
|
|||
/*
|
||||
* Copyright (C) 2023 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2023 SiFive, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the company may not be used to endorse or promote
|
||||
* products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY SIFIVE INC ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL SIFIVE INC BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(__riscv_v)
|
||||
|
||||
#include "sys/asm.h"
|
||||
|
||||
#define pDst a0
|
||||
#define pSrc a1
|
||||
#define pDstPtr a2
|
||||
|
||||
#define iVL a3
|
||||
#define iCurrentVL a4
|
||||
#define iActiveElemPos a5
|
||||
|
||||
#define ELEM_LMUL_SETTING m1
|
||||
#define vMask1 v0
|
||||
#define vMask2 v1
|
||||
#define vStr1 v8
|
||||
#define vStr2 v16
|
||||
|
||||
ENTRY(strcat_vext)
|
||||
|
||||
mv pDstPtr, pDst
|
||||
|
||||
// the strlen of dst
|
||||
L(strlen_loop):
|
||||
vsetvli iVL, zero, e8, ELEM_LMUL_SETTING, ta, ma
|
||||
|
||||
vle8ff.v vStr1, (pDstPtr)
|
||||
// find the '\0'
|
||||
vmseq.vx vMask1, vStr1, zero
|
||||
csrr iCurrentVL, vl
|
||||
vfirst.m iActiveElemPos, vMask1
|
||||
add pDstPtr, pDstPtr, iCurrentVL
|
||||
bltz iActiveElemPos, L(strlen_loop)
|
||||
|
||||
sub pDstPtr, pDstPtr, iCurrentVL
|
||||
add pDstPtr, pDstPtr, iActiveElemPos
|
||||
|
||||
// copy pSrc to pDstPtr
|
||||
L(strcpy_loop):
|
||||
vsetvli iVL, zero, e8, ELEM_LMUL_SETTING, ta, ma
|
||||
|
||||
vle8ff.v vStr1, (pSrc)
|
||||
vmseq.vx vMask2, vStr1, zero
|
||||
csrr iCurrentVL, vl
|
||||
vfirst.m iActiveElemPos, vMask2
|
||||
vmsif.m vMask1, vMask2
|
||||
add pSrc, pSrc, iCurrentVL
|
||||
vse8.v vStr1, (pDstPtr), vMask1.t
|
||||
add pDstPtr, pDstPtr, iCurrentVL
|
||||
bltz iActiveElemPos, L(strcpy_loop)
|
||||
|
||||
ret
|
||||
|
||||
END(strcat_vext)
|
||||
|
||||
#endif
|
98
libc/arch-riscv64/string/strchr_vext.S
Normal file
98
libc/arch-riscv64/string/strchr_vext.S
Normal file
|
@ -0,0 +1,98 @@
|
|||
/*
|
||||
* Copyright (C) 2023 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2023 SiFive, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the company may not be used to endorse or promote
|
||||
* products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY SIFIVE INC ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL SIFIVE INC BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(__riscv_v)
|
||||
|
||||
#include "sys/asm.h"
|
||||
|
||||
#define pStr a0
|
||||
#define iCh a1
|
||||
#define iEndOffset a2
|
||||
#define iChOffset a3
|
||||
#define iTemp1 a4
|
||||
#define iTemp2 a5
|
||||
#define iCurrentVL a6
|
||||
#define iVL t0
|
||||
|
||||
#define ELEM_LMUL_SETTING m1
|
||||
#define vStr v0
|
||||
#define vMaskEnd v8
|
||||
#define vMaskCh v9
|
||||
|
||||
ENTRY(strchr_vext)
|
||||
|
||||
L(strchr_loop):
|
||||
vsetvli iVL, zero, e8, ELEM_LMUL_SETTING, ta, ma
|
||||
vle8ff.v vStr, (pStr)
|
||||
vmseq.vi vMaskEnd, vStr, 0
|
||||
vmseq.vx vMaskCh, vStr, iCh
|
||||
vfirst.m iEndOffset, vMaskEnd /* first occurrence of \0 */
|
||||
vfirst.m iChOffset, vMaskCh /* first occurrence of ch */
|
||||
sltz iTemp1, iChOffset
|
||||
sltu iTemp2, iEndOffset, iChOffset
|
||||
or iTemp1, iTemp1, iTemp2
|
||||
beqz iTemp1, L(found_ch) /* Found ch, not preceded by \0? */
|
||||
csrr iCurrentVL, vl
|
||||
add pStr, pStr, iCurrentVL
|
||||
bltz iEndOffset, L(strchr_loop) /* Didn't find \0? */
|
||||
li pStr, 0
|
||||
ret
|
||||
L(found_ch):
|
||||
add pStr, pStr, iChOffset
|
||||
ret
|
||||
|
||||
END(strchr_vext)
|
||||
|
||||
#endif
|
173
libc/arch-riscv64/string/strcmp_vext.S
Normal file
173
libc/arch-riscv64/string/strcmp_vext.S
Normal file
|
@ -0,0 +1,173 @@
|
|||
/*
|
||||
* Copyright (C) 2023 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2023 SiFive, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the company may not be used to endorse or promote
|
||||
* products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY SIFIVE INC ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL SIFIVE INC BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(__riscv_v)
|
||||
|
||||
#include "sys/asm.h"
|
||||
|
||||
#define iResult a0
|
||||
|
||||
#define pStr1 a0
|
||||
#define pStr2 a1
|
||||
|
||||
#define iVL a2
|
||||
#define iTemp1 a3
|
||||
#define iTemp2 a4
|
||||
#define iLMUL1 a5
|
||||
#define iLMUL2 a6
|
||||
#define iLMUL4 a7
|
||||
|
||||
#define iLMUL t0
|
||||
|
||||
#define vStr1 v0
|
||||
#define vStr2 v8
|
||||
#define vMask1 v16
|
||||
#define vMask2 v17
|
||||
|
||||
ENTRY(strcmp_vext)
|
||||
|
||||
# increase the lmul using the following sequences:
|
||||
# 1/2, 1/2, 1, 2, 4, 4, 4, ...
|
||||
|
||||
# lmul=1/2
|
||||
vsetvli iVL, zero, e8, mf2, ta, ma
|
||||
|
||||
vle8ff.v vStr1, (pStr1)
|
||||
# check if vStr1[i] == 0
|
||||
vmseq.vx vMask1, vStr1, zero
|
||||
|
||||
vle8ff.v vStr2, (pStr2)
|
||||
# check if vStr1[i] != vStr2[i]
|
||||
vmsne.vv vMask2, vStr1, vStr2
|
||||
|
||||
# find the index x for vStr1[x]==0
|
||||
vfirst.m iTemp1, vMask1
|
||||
# find the index x for vStr1[x]!=vStr2[x]
|
||||
vfirst.m iTemp2, vMask2
|
||||
|
||||
bgez iTemp1, L(check1)
|
||||
bgez iTemp2, L(check2)
|
||||
|
||||
# get the current vl updated by vle8ff.
|
||||
csrr iVL, vl
|
||||
add pStr1, pStr1, iVL
|
||||
add pStr2, pStr2, iVL
|
||||
|
||||
vsetvli iVL, zero, e8, mf2, ta, ma
|
||||
addi iLMUL1, zero, 1
|
||||
addi iLMUL, zero, 1
|
||||
j L(loop)
|
||||
L(m1):
|
||||
vsetvli iVL, zero, e8, m1, ta, ma
|
||||
addi iLMUL2, zero, 2
|
||||
addi iLMUL, zero, 2
|
||||
j L(loop)
|
||||
L(m2):
|
||||
vsetvli iVL, zero, e8, m2, ta, ma
|
||||
addi iLMUL4, zero, 4
|
||||
addi iLMUL, zero, 4
|
||||
j L(loop)
|
||||
L(m4):
|
||||
vsetvli iVL, zero, e8, m4, ta, ma
|
||||
|
||||
L(loop):
|
||||
vle8ff.v vStr1, (pStr1)
|
||||
vmseq.vx vMask1, vStr1, zero
|
||||
|
||||
vle8ff.v vStr2, (pStr2)
|
||||
vmsne.vv vMask2, vStr1, vStr2
|
||||
|
||||
vfirst.m iTemp1, vMask1
|
||||
vfirst.m iTemp2, vMask2
|
||||
|
||||
bgez iTemp1, L(check1)
|
||||
bgez iTemp2, L(check2)
|
||||
|
||||
csrr iVL, vl
|
||||
add pStr1, pStr1, iVL
|
||||
add pStr2, pStr2, iVL
|
||||
|
||||
beq iLMUL, iLMUL1, L(m1)
|
||||
beq iLMUL, iLMUL2, L(m2)
|
||||
beq iLMUL, iLMUL4, L(m4)
|
||||
j L(loop)
|
||||
|
||||
// iTemp1>=0
|
||||
L(check1):
|
||||
bltz iTemp2, 1f
|
||||
blt iTemp2, iTemp1, L(check2)
|
||||
1:
|
||||
// iTemp2<0
|
||||
// iTemp2>=0 && iTemp1<iTemp2
|
||||
add pStr1, pStr1, iTemp1
|
||||
add pStr2, pStr2, iTemp1
|
||||
lbu iTemp1, 0(pStr1)
|
||||
lbu iTemp2, 0(pStr2)
|
||||
sub iResult, iTemp1, iTemp2
|
||||
ret
|
||||
|
||||
// iTemp1<0
|
||||
// iTemp2>=0
|
||||
L(check2):
|
||||
add pStr1, pStr1, iTemp2
|
||||
add pStr2, pStr2, iTemp2
|
||||
lbu iTemp1, 0(pStr1)
|
||||
lbu iTemp2, 0(pStr2)
|
||||
sub iResult, iTemp1, iTemp2
|
||||
ret
|
||||
|
||||
END(strcmp_vext)
|
||||
|
||||
#endif
|
95
libc/arch-riscv64/string/strcpy_vext.S
Normal file
95
libc/arch-riscv64/string/strcpy_vext.S
Normal file
|
@ -0,0 +1,95 @@
|
|||
/*
|
||||
* Copyright (C) 2023 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2023 SiFive, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the company may not be used to endorse or promote
|
||||
* products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY SIFIVE INC ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL SIFIVE INC BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(__riscv_v)
|
||||
|
||||
#include "sys/asm.h"
|
||||
|
||||
#define pDst a0
|
||||
#define pSrc a1
|
||||
#define pDstPtr a2
|
||||
|
||||
#define iVL a3
|
||||
#define iCurrentVL a4
|
||||
#define iActiveElemPos a5
|
||||
|
||||
#define ELEM_LMUL_SETTING m1
|
||||
#define vMask1 v0
|
||||
#define vMask2 v1
|
||||
#define vStr1 v8
|
||||
#define vStr2 v16
|
||||
|
||||
ENTRY(strcpy_vext)
|
||||
|
||||
mv pDstPtr, pDst
|
||||
|
||||
// copy pSrc to pDstPtr
|
||||
L(strcpy_loop):
|
||||
vsetvli iVL, zero, e8, ELEM_LMUL_SETTING, ta, ma
|
||||
vle8ff.v vStr1, (pSrc)
|
||||
vmseq.vx vMask2, vStr1, zero
|
||||
csrr iCurrentVL, vl
|
||||
vfirst.m iActiveElemPos, vMask2
|
||||
vmsif.m vMask1, vMask2
|
||||
add pSrc, pSrc, iCurrentVL
|
||||
vse8.v vStr1, (pDstPtr), vMask1.t
|
||||
add pDstPtr, pDstPtr, iCurrentVL
|
||||
bltz iActiveElemPos, L(strcpy_loop)
|
||||
|
||||
ret
|
||||
|
||||
END(strcpy_vext)
|
||||
|
||||
#endif
|
91
libc/arch-riscv64/string/strlen_vext.S
Normal file
91
libc/arch-riscv64/string/strlen_vext.S
Normal file
|
@ -0,0 +1,91 @@
|
|||
/*
|
||||
* Copyright (C) 2023 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2023 SiFive, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the company may not be used to endorse or promote
|
||||
* products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY SIFIVE INC ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL SIFIVE INC BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(__riscv_v)
|
||||
|
||||
#include "sys/asm.h"
|
||||
|
||||
#define iResult a0
|
||||
#define pStr a0
|
||||
#define pCopyStr a1
|
||||
#define iVL a2
|
||||
#define iCurrentVL a2
|
||||
#define iEndOffset a3
|
||||
|
||||
#define ELEM_LMUL_SETTING m2
|
||||
#define vStr v0
|
||||
#define vMaskEnd v2
|
||||
|
||||
ENTRY(strlen_vext)
|
||||
|
||||
mv pCopyStr, pStr
|
||||
L(loop):
|
||||
vsetvli iVL, zero, e8, ELEM_LMUL_SETTING, ta, ma
|
||||
vle8ff.v vStr, (pCopyStr)
|
||||
csrr iCurrentVL, vl
|
||||
vmseq.vi vMaskEnd, vStr, 0
|
||||
vfirst.m iEndOffset, vMaskEnd
|
||||
add pCopyStr, pCopyStr, iCurrentVL
|
||||
bltz iEndOffset, L(loop)
|
||||
|
||||
add pStr, pStr, iCurrentVL
|
||||
add pCopyStr, pCopyStr, iEndOffset
|
||||
sub iResult, pCopyStr, iResult
|
||||
|
||||
ret
|
||||
|
||||
END(strlen)
|
||||
|
||||
#endif
|
121
libc/arch-riscv64/string/strncat_vext.S
Normal file
121
libc/arch-riscv64/string/strncat_vext.S
Normal file
|
@ -0,0 +1,121 @@
|
|||
/*
|
||||
* Copyright (C) 2023 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2023 SiFive, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the company may not be used to endorse or promote
|
||||
* products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY SIFIVE INC ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL SIFIVE INC BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(__riscv_v)
|
||||
|
||||
#include "sys/asm.h"
|
||||
|
||||
#define pDst a0
|
||||
#define pSrc a1
|
||||
#define iLength a2
|
||||
#define pDstPtr a3
|
||||
|
||||
#define iVL a4
|
||||
#define iCurrentVL a5
|
||||
#define iActiveElemPos a6
|
||||
|
||||
#define ELEM_LMUL_SETTING m1
|
||||
#define vMask1 v0
|
||||
#define vMask2 v1
|
||||
#define vStr1 v8
|
||||
#define vStr2 v16
|
||||
|
||||
ENTRY(strncat_vext)
|
||||
|
||||
mv pDstPtr, pDst
|
||||
|
||||
// the strlen of dst
|
||||
L(strlen_loop):
|
||||
vsetvli iVL, zero, e8, ELEM_LMUL_SETTING, ta, ma
|
||||
|
||||
vle8ff.v vStr1, (pDstPtr)
|
||||
// find the '\0'
|
||||
vmseq.vx vMask1, vStr1, zero
|
||||
csrr iCurrentVL, vl
|
||||
vfirst.m iActiveElemPos, vMask1
|
||||
add pDstPtr, pDstPtr, iCurrentVL
|
||||
bltz iActiveElemPos, L(strlen_loop)
|
||||
|
||||
sub pDstPtr, pDstPtr, iCurrentVL
|
||||
add pDstPtr, pDstPtr, iActiveElemPos
|
||||
|
||||
// copy pSrc to pDstPtr
|
||||
L(strcpy_loop):
|
||||
vsetvli iVL, iLength, e8, ELEM_LMUL_SETTING, ta, ma
|
||||
|
||||
vle8ff.v vStr1, (pSrc)
|
||||
vmseq.vx vMask2, vStr1, zero
|
||||
csrr iCurrentVL, vl
|
||||
vfirst.m iActiveElemPos, vMask2
|
||||
vmsif.m vMask1, vMask2
|
||||
add pSrc, pSrc, iCurrentVL
|
||||
sub iLength, iLength, iCurrentVL
|
||||
vse8.v vStr1, (pDstPtr), vMask1.t
|
||||
add pDstPtr, pDstPtr, iCurrentVL
|
||||
beqz iLength, L(fill_zero)
|
||||
bltz iActiveElemPos, L(strcpy_loop)
|
||||
|
||||
ret
|
||||
|
||||
L(fill_zero):
|
||||
bgez iActiveElemPos, L(fill_zero_end)
|
||||
sb zero, (pDstPtr)
|
||||
|
||||
L(fill_zero_end):
|
||||
ret
|
||||
|
||||
END(strncat_vext)
|
||||
|
||||
#endif
|
123
libc/arch-riscv64/string/strncmp_vext.S
Normal file
123
libc/arch-riscv64/string/strncmp_vext.S
Normal file
|
@ -0,0 +1,123 @@
|
|||
/*
|
||||
* Copyright (C) 2023 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2023 SiFive, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the company may not be used to endorse or promote
|
||||
* products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY SIFIVE INC ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL SIFIVE INC BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(__riscv_v)
|
||||
|
||||
#include "sys/asm.h"
|
||||
|
||||
#define iResult a0
|
||||
|
||||
#define pStr1 a0
|
||||
#define pStr2 a1
|
||||
#define iLength a2
|
||||
|
||||
#define iVL a3
|
||||
#define iTemp1 a4
|
||||
#define iTemp2 a5
|
||||
|
||||
#define ELEM_LMUL_SETTING m1
|
||||
#define vStr1 v0
|
||||
#define vStr2 v4
|
||||
#define vMask1 v8
|
||||
#define vMask2 v9
|
||||
|
||||
ENTRY(strncmp_vext)
|
||||
|
||||
beqz iLength, L(zero_length)
|
||||
|
||||
L(loop):
|
||||
vsetvli iVL, iLength, e8, ELEM_LMUL_SETTING, ta, ma
|
||||
|
||||
vle8ff.v vStr1, (pStr1)
|
||||
# vStr1[i] == 0
|
||||
vmseq.vx vMask1, vStr1, zero
|
||||
|
||||
vle8ff.v vStr2, (pStr2)
|
||||
# vStr1[i] != vStr2[i]
|
||||
vmsne.vv vMask2, vStr1, vStr2
|
||||
|
||||
csrr iVL, vl
|
||||
|
||||
# r = mask1 | mask2
|
||||
# We could use vfirst.m to get the first zero char or the
|
||||
# first different char between str1 and str2.
|
||||
vmor.mm vMask1, vMask1, vMask2
|
||||
|
||||
sub iLength, iLength, iVL
|
||||
|
||||
vfirst.m iTemp1, vMask1
|
||||
|
||||
bgez iTemp1, L(end_loop)
|
||||
|
||||
add pStr1, pStr1, iVL
|
||||
add pStr2, pStr2, iVL
|
||||
bnez iLength, L(loop)
|
||||
L(end_loop):
|
||||
|
||||
add pStr1, pStr1, iTemp1
|
||||
add pStr2, pStr2, iTemp1
|
||||
lbu iTemp1, 0(pStr1)
|
||||
lbu iTemp2, 0(pStr2)
|
||||
|
||||
sub iResult, iTemp1, iTemp2
|
||||
ret
|
||||
|
||||
L(zero_length):
|
||||
li iResult, 0
|
||||
ret
|
||||
|
||||
END(strncmp_vext)
|
||||
|
||||
#endif
|
118
libc/arch-riscv64/string/strncpy_vext.S
Normal file
118
libc/arch-riscv64/string/strncpy_vext.S
Normal file
|
@ -0,0 +1,118 @@
|
|||
/*
|
||||
* Copyright (C) 2023 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2023 SiFive, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the company may not be used to endorse or promote
|
||||
* products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY SIFIVE INC ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL SIFIVE INC BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(__riscv_v)
|
||||
|
||||
#include "sys/asm.h"
|
||||
|
||||
#define pDst a0
|
||||
#define pSrc a1
|
||||
#define iLength a2
|
||||
#define pDstPtr a3
|
||||
|
||||
#define iVL a4
|
||||
#define iCurrentVL a5
|
||||
#define iActiveElemPos a6
|
||||
|
||||
#define ELEM_LMUL_SETTING m1
|
||||
#define vMask1 v0
|
||||
#define vMask2 v1
|
||||
#define ZERO_FILL_ELEM_LMUL_SETTING m8
|
||||
#define vStr1 v8
|
||||
#define vStr2 v16
|
||||
|
||||
ENTRY(strncpy_vext)
|
||||
|
||||
mv pDstPtr, pDst
|
||||
|
||||
// copy pSrc to pDstPtr
|
||||
L(strcpy_loop):
|
||||
vsetvli iVL, iLength, e8, ELEM_LMUL_SETTING, ta, ma
|
||||
vle8ff.v vStr1, (pSrc)
|
||||
vmseq.vx vMask2, vStr1, zero
|
||||
csrr iCurrentVL, vl
|
||||
vfirst.m iActiveElemPos, vMask2
|
||||
vmsif.m vMask1, vMask2
|
||||
add pSrc, pSrc, iCurrentVL
|
||||
sub iLength, iLength, iCurrentVL
|
||||
vse8.v vStr1, (pDstPtr), vMask1.t
|
||||
add pDstPtr, pDstPtr, iCurrentVL
|
||||
bgez iActiveElemPos, L(fill_zero)
|
||||
bnez iLength, L(strcpy_loop)
|
||||
ret
|
||||
|
||||
# fill the tail zero.
|
||||
L(fill_zero):
|
||||
sub iVL, iCurrentVL, iActiveElemPos
|
||||
add iLength, iLength, iVL
|
||||
bnez iLength, 1f
|
||||
ret
|
||||
1:
|
||||
sub pDstPtr, pDstPtr, iVL
|
||||
vsetvli zero, iLength, e8, ZERO_FILL_ELEM_LMUL_SETTING, ta, ma
|
||||
vmv.v.x vStr2, zero
|
||||
|
||||
L(fill_zero_loop):
|
||||
vsetvli iVL, iLength, e8, ZERO_FILL_ELEM_LMUL_SETTING, ta, ma
|
||||
vse8.v vStr2, (pDstPtr)
|
||||
sub iLength, iLength, iVL
|
||||
add pDstPtr, pDstPtr, iVL
|
||||
bnez iLength, L(fill_zero_loop)
|
||||
|
||||
ret
|
||||
|
||||
END(strncpy_vext)
|
||||
|
||||
#endif
|
93
libc/arch-riscv64/string/strnlen_vext.S
Normal file
93
libc/arch-riscv64/string/strnlen_vext.S
Normal file
|
@ -0,0 +1,93 @@
|
|||
/*
|
||||
* Copyright (C) 2023 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2023 SiFive, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the company may not be used to endorse or promote
|
||||
* products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY SIFIVE INC ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL SIFIVE INC BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(__riscv_v)
|
||||
|
||||
#include "sys/asm.h"
|
||||
|
||||
#define pStr a0
|
||||
#define pCopyStr a2
|
||||
#define iRetValue a0
|
||||
#define iMaxlen a1
|
||||
#define iCurrentVL a3
|
||||
#define iEndOffset a4
|
||||
|
||||
#define ELEM_LMUL_SETTING m1
|
||||
#define vStr v0
|
||||
#define vMaskEnd v8
|
||||
|
||||
ENTRY(strnlen_vext)
|
||||
|
||||
mv pCopyStr, pStr
|
||||
mv iRetValue, iMaxlen
|
||||
L(strnlen_loop):
|
||||
beqz iMaxlen, L(end_strnlen_loop)
|
||||
vsetvli zero, iMaxlen, e8, ELEM_LMUL_SETTING, ta, ma
|
||||
vle8ff.v vStr, (pCopyStr)
|
||||
vmseq.vi vMaskEnd, vStr, 0
|
||||
vfirst.m iEndOffset, vMaskEnd /* first occurrence of \0 */
|
||||
csrr iCurrentVL, vl
|
||||
add pCopyStr, pCopyStr, iCurrentVL
|
||||
sub iMaxlen, iMaxlen, iCurrentVL
|
||||
bltz iEndOffset, L(strnlen_loop)
|
||||
add iMaxlen, iMaxlen, iCurrentVL
|
||||
sub iRetValue, iRetValue, iMaxlen
|
||||
add iRetValue, iRetValue, iEndOffset
|
||||
L(end_strnlen_loop):
|
||||
ret
|
||||
|
||||
END(strnlen_vext)
|
||||
|
||||
#endif
|
76
libc/arch-riscv64/string/sys/asm.h
Normal file
76
libc/arch-riscv64/string/sys/asm.h
Normal file
|
@ -0,0 +1,76 @@
|
|||
/*
|
||||
* Copyright (C) 2023 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2023 SiFive, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the company may not be used to endorse or promote
|
||||
* products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY SIFIVE INC ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL SIFIVE INC BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _SYS_ASM_H
|
||||
#define _SYS_ASM_H
|
||||
|
||||
#undef LEAF
|
||||
#define LEAF(symbol) \
|
||||
.globl symbol; \
|
||||
.align 2; \
|
||||
.type symbol, @function; \
|
||||
symbol: \
|
||||
.cfi_startproc;
|
||||
|
||||
#undef END
|
||||
#define END(function) \
|
||||
.cfi_endproc; \
|
||||
.size function, .- function
|
||||
|
||||
#define ENTRY(name) LEAF(name)
|
||||
|
||||
#define L(label) .L##label
|
||||
|
||||
#endif /* _SYS_ASM_H */
|
Loading…
Reference in a new issue