mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-10 07:10:06 +00:00
riscv: Add support for XTheadBb in string-fz[a,i].h
XTheadBb has similar instructions like Zbb, which allow optimized string processing: * th.ff0: find-first zero is a CLZ instruction. * th.tstnbz: Similar like orc.b, but with a bit-inverted result. The instructions are documented here: https://github.com/T-head-Semi/thead-extension-spec/tree/master/xtheadbb These instructions can be found in the T-Head C906 and the C910. Tested with the string tests. Signed-off-by: Christoph Müllner <christoph.muellner@vrull.eu> Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
This commit is contained in:
parent
3bf7bab88b
commit
3d6fcf1bd7
@ -19,7 +19,7 @@
|
||||
#ifndef _RISCV_STRING_FZA_H
|
||||
#define _RISCV_STRING_FZA_H 1
|
||||
|
||||
#ifdef __riscv_zbb
|
||||
#if defined __riscv_zbb || defined __riscv_xtheadbb
|
||||
/* With bitmap extension we can use orc.b to find all zero bytes. */
|
||||
# include <string-misc.h>
|
||||
# include <string-optype.h>
|
||||
@ -32,8 +32,13 @@ static __always_inline find_t
|
||||
find_zero_all (op_t x)
|
||||
{
|
||||
find_t r;
|
||||
#ifdef __riscv_xtheadbb
|
||||
asm ("th.tstnbz %0, %1" : "=r" (r) : "r" (x));
|
||||
return r;
|
||||
#else
|
||||
asm ("orc.b %0, %1" : "=r" (r) : "r" (x));
|
||||
return ~r;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* This function returns 0xff for each byte that is equal between X1 and
|
||||
|
@ -19,7 +19,7 @@
|
||||
#ifndef _STRING_RISCV_FZI_H
|
||||
#define _STRING_RISCV_FZI_H 1
|
||||
|
||||
#ifdef __riscv_zbb
|
||||
#if defined __riscv_zbb || defined __riscv_xtheadbb
|
||||
# include <sysdeps/generic/string-fzi.h>
|
||||
#else
|
||||
/* Without bitmap clz/ctz extensions, it is faster to direct test the bits
|
||||
|
Loading…
Reference in New Issue
Block a user