Message ID | 20240204101132.653-2-zhujunxian@oss.cipunited.com |
---|---|
State | New |
Headers | show |
Series | mips: Use builtins for ffs and ffsll | expand |
On 04/02/24 07:11, Junxian Zhu wrote: > From: Junxian Zhu <zhujunxian@oss.cipunited.com> > > __builtin_ffs{,ll} basically on __builtin_ctz{,ll} in MIPS GCC compiler. > The hardware ctz instructions were available after MIPS{32,64} Release1. By using builtin ctz. It can also reduce code size of ffs/ffsll. > > Checked on mips o32. mips64. > > Signed-off-by: Junxian Zhu <zhujunxian@oss.cipunited.com> LGTM, thanks. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> > --- > sysdeps/mips/math-use-builtins-ffs.h | 2 ++ > 1 file changed, 2 insertions(+) > create mode 100644 sysdeps/mips/math-use-builtins-ffs.h > > diff --git a/sysdeps/mips/math-use-builtins-ffs.h b/sysdeps/mips/math-use-builtins-ffs.h > new file mode 100644 > index 0000000000..78b3f14fae > --- /dev/null > +++ b/sysdeps/mips/math-use-builtins-ffs.h > @@ -0,0 +1,2 @@ > +#define USE_FFS_BUILTIN (__mips_isa_rev >= 1) > +#define USE_FFSLL_BUILTIN (__mips_isa_rev >= 1)
On 05/02/24 11:19, Adhemerval Zanella Netto wrote: > > > On 04/02/24 07:11, Junxian Zhu wrote: >> From: Junxian Zhu <zhujunxian@oss.cipunited.com> >> >> __builtin_ffs{,ll} basically on __builtin_ctz{,ll} in MIPS GCC compiler. >> The hardware ctz instructions were available after MIPS{32,64} Release1. By using builtin ctz. It can also reduce code size of ffs/ffsll. >> >> Checked on mips o32. mips64. >> >> Signed-off-by: Junxian Zhu <zhujunxian@oss.cipunited.com> > > LGTM, thanks. > > Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> > >> --- >> sysdeps/mips/math-use-builtins-ffs.h | 2 ++ >> 1 file changed, 2 insertions(+) >> create mode 100644 sysdeps/mips/math-use-builtins-ffs.h >> >> diff --git a/sysdeps/mips/math-use-builtins-ffs.h b/sysdeps/mips/math-use-builtins-ffs.h >> new file mode 100644 >> index 0000000000..78b3f14fae >> --- /dev/null >> +++ b/sysdeps/mips/math-use-builtins-ffs.h >> @@ -0,0 +1,2 @@ >> +#define USE_FFS_BUILTIN (__mips_isa_rev >= 1) >> +#define USE_FFSLL_BUILTIN (__mips_isa_rev >= 1) In fact you need to include <sysdep.h> since gcc only defines __mips_isa_rev for -mips32 or higher.
On Mon, 5 Feb 2024, Adhemerval Zanella Netto wrote: > >> __builtin_ffs{,ll} basically on __builtin_ctz{,ll} in MIPS GCC compiler. > >> The hardware ctz instructions were available after MIPS{32,64} Release1. By > using builtin ctz. It can also reduce code size of ffs/ffsll. > >> > >> Checked on mips o32. mips64. > >> > >> Signed-off-by: Junxian Zhu <zhujunxian@oss.cipunited.com> > > > > LGTM, thanks. > > > > Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> > > > >> --- > >> sysdeps/mips/math-use-builtins-ffs.h | 2 ++ > >> 1 file changed, 2 insertions(+) > >> create mode 100644 sysdeps/mips/math-use-builtins-ffs.h > >> > >> diff --git a/sysdeps/mips/math-use-builtins-ffs.h > b/sysdeps/mips/math-use-builtins-ffs.h > >> new file mode 100644 > >> index 0000000000..78b3f14fae > >> --- /dev/null > >> +++ b/sysdeps/mips/math-use-builtins-ffs.h > >> @@ -0,0 +1,2 @@ > >> +#define USE_FFS_BUILTIN (__mips_isa_rev >= 1) > >> +#define USE_FFSLL_BUILTIN (__mips_isa_rev >= 1) > > In fact you need to include <sysdep.h> since gcc only defines __mips_isa_rev > for -mips32 or higher. Also this causes code pessimisation for MIPS32 and `ffsll', as there is no hw instruction for this operation in the 32-bit ABI and consequently `__builtin_ffsll' resorts to a libcall. So IMO USE_FFSLL_BUILTIN ought to only be set for 64-bit ABIs, making `ffsll' defer to `ffs' (and then use 32-bit CLZ as appropriate). NB contrary to the change description there is no CTZ instruction in the MIPS ISA at any level. There are: CLO, CLZ, and for 64-bit: DCLO, DCLZ, and `__builtin_ctz', etc. can be synthesized with the usual calculation. Maciej
diff --git a/sysdeps/mips/math-use-builtins-ffs.h b/sysdeps/mips/math-use-builtins-ffs.h new file mode 100644 index 0000000000..78b3f14fae --- /dev/null +++ b/sysdeps/mips/math-use-builtins-ffs.h @@ -0,0 +1,2 @@ +#define USE_FFS_BUILTIN (__mips_isa_rev >= 1) +#define USE_FFSLL_BUILTIN (__mips_isa_rev >= 1)