All of lore.kernel.org
 help / color / mirror / Atom feed
From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
To: Vineet Gupta <Vineet.Gupta1@synopsys.com>, libc-alpha@sourceware.org
Cc: linux-snps-arc@lists.infradead.org
Subject: Re: [PATCH v6 06/13] ARC: hardware floating point support
Date: Fri, 29 May 2020 11:12:41 -0300	[thread overview]
Message-ID: <de8975a0-bb03-8cec-be97-56f8c4e2a2f3@linaro.org> (raw)
In-Reply-To: <20200423014126.10417-7-vgupta@synopsys.com>



On 22/04/2020 22:41, Vineet Gupta via Libc-alpha wrote:
> Signed-off-by: Vineet Gupta <vgupta@synopsys.com>

As prior patch we do not use DCO, but rather copyright assignment.

Some comments below.

> ---
>  sysdeps/arc/fpu/e_sqrt.c        |  27 ++++++++
>  sysdeps/arc/fpu/e_sqrtf.c       |  27 ++++++++
>  sysdeps/arc/fpu/fclrexcpt.c     |  36 +++++++++++
>  sysdeps/arc/fpu/fegetenv.c      |  37 +++++++++++
>  sysdeps/arc/fpu/fegetmode.c     |  31 ++++++++++
>  sysdeps/arc/fpu/fegetround.c    |  32 ++++++++++
>  sysdeps/arc/fpu/feholdexcpt.c   |  43 +++++++++++++
>  sysdeps/arc/fpu/fesetenv.c      |  48 +++++++++++++++
>  sysdeps/arc/fpu/fesetexcept.c   |  32 ++++++++++
>  sysdeps/arc/fpu/fesetmode.c     |  40 ++++++++++++
>  sysdeps/arc/fpu/fesetround.c    |  40 ++++++++++++
>  sysdeps/arc/fpu/feupdateenv.c   |  51 +++++++++++++++
>  sysdeps/arc/fpu/fgetexcptflg.c  |  31 ++++++++++
>  sysdeps/arc/fpu/fraiseexcpt.c   |  39 ++++++++++++
>  sysdeps/arc/fpu/fsetexcptflg.c  |  38 ++++++++++++
>  sysdeps/arc/fpu/ftestexcept.c   |  33 ++++++++++
>  sysdeps/arc/fpu/s_fma.c         |  28 +++++++++
>  sysdeps/arc/fpu/s_fmaf.c        |  28 +++++++++
>  sysdeps/arc/fpu_control.h       | 106 ++++++++++++++++++++++++++++++++
>  sysdeps/arc/get-rounding-mode.h |  38 ++++++++++++
>  sysdeps/arc/math-tests-trap.h   |  27 ++++++++
>  sysdeps/arc/tininess.h          |   1 +
>  22 files changed, 813 insertions(+)
>  create mode 100644 sysdeps/arc/fpu/e_sqrt.c
>  create mode 100644 sysdeps/arc/fpu/e_sqrtf.c
>  create mode 100644 sysdeps/arc/fpu/fclrexcpt.c
>  create mode 100644 sysdeps/arc/fpu/fegetenv.c
>  create mode 100644 sysdeps/arc/fpu/fegetmode.c
>  create mode 100644 sysdeps/arc/fpu/fegetround.c
>  create mode 100644 sysdeps/arc/fpu/feholdexcpt.c
>  create mode 100644 sysdeps/arc/fpu/fesetenv.c
>  create mode 100644 sysdeps/arc/fpu/fesetexcept.c
>  create mode 100644 sysdeps/arc/fpu/fesetmode.c
>  create mode 100644 sysdeps/arc/fpu/fesetround.c
>  create mode 100644 sysdeps/arc/fpu/feupdateenv.c
>  create mode 100644 sysdeps/arc/fpu/fgetexcptflg.c
>  create mode 100644 sysdeps/arc/fpu/fraiseexcpt.c
>  create mode 100644 sysdeps/arc/fpu/fsetexcptflg.c
>  create mode 100644 sysdeps/arc/fpu/ftestexcept.c
>  create mode 100644 sysdeps/arc/fpu/s_fma.c
>  create mode 100644 sysdeps/arc/fpu/s_fmaf.c
>  create mode 100644 sysdeps/arc/fpu_control.h
>  create mode 100644 sysdeps/arc/get-rounding-mode.h
>  create mode 100644 sysdeps/arc/math-tests-trap.h
>  create mode 100644 sysdeps/arc/tininess.h
> 
> diff --git a/sysdeps/arc/fpu/e_sqrt.c b/sysdeps/arc/fpu/e_sqrt.c
> new file mode 100644
> index 000000000000..abb67ef7b061
> --- /dev/null
> +++ b/sysdeps/arc/fpu/e_sqrt.c
> @@ -0,0 +1,27 @@
> +/* Square root of floating point number.
> +   Copyright (C) 2015-2020 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library; if not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#include <math_private.h>
> +#include <libm-alias-finite.h>
> +
> +double
> +__ieee754_sqrt (double d)
> +{
> +  return __builtin_sqrt (d);
> +}
> +libm_alias_finite (__ieee754_sqrt, __sqrt)

I think it is better to extend to math-use-builtins.h for cover 
e_sqrt{f} so we can also adapt to other architecutes.

> diff --git a/sysdeps/arc/fpu/e_sqrtf.c b/sysdeps/arc/fpu/e_sqrtf.c
> new file mode 100644
> index 000000000000..13008a4f45d6
> --- /dev/null
> +++ b/sysdeps/arc/fpu/e_sqrtf.c
> @@ -0,0 +1,27 @@
> +/* Single-precision floating point square root.
> +   Copyright (C) 2015-2020 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library; if not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#include <math_private.h>
> +#include <libm-alias-finite.h>
> +
> +float
> +__ieee754_sqrtf (float s)
> +{
> +  return __builtin_sqrtf (s);
> +}
> +libm_alias_finite (__ieee754_sqrtf, __sqrtf)

Same as before.

> diff --git a/sysdeps/arc/fpu/fclrexcpt.c b/sysdeps/arc/fpu/fclrexcpt.c
> new file mode 100644
> index 000000000000..549968dcd465
> --- /dev/null
> +++ b/sysdeps/arc/fpu/fclrexcpt.c
> @@ -0,0 +1,36 @@
> +/* Clear given exceptions in current floating-point environment.
> +   Copyright (C) 2018-2020 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library.  If not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#include <fenv.h>
> +#include <fpu_control.h>
> +
> +int
> +feclearexcept (int excepts)
> +{
> +  unsigned int fpsr;
> +
> +  _FPU_GETS (fpsr);
> +
> +  /* Clear the relevant bits, FWE is preserved.  */
> +  fpsr &= ~excepts;
> +
> +  _FPU_SETS (fpsr);
> +
> +  return 0;
> +}
> +libm_hidden_def (feclearexcept)
Ok.

> diff --git a/sysdeps/arc/fpu/fegetenv.c b/sysdeps/arc/fpu/fegetenv.c
> new file mode 100644
> index 000000000000..058652aeb685
> --- /dev/null
> +++ b/sysdeps/arc/fpu/fegetenv.c
> @@ -0,0 +1,37 @@
> +/* Store current floating-point environment.
> +   Copyright (C) 2018-2020 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library.  If not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#include <fenv.h>
> +#include <fpu_control.h>
> +
> +int
> +__fegetenv (fenv_t *envp)
> +{
> +  unsigned int fpcr;
> +  unsigned int fpsr;
> +
> +  _FPU_GETCW (fpcr);
> +  _FPU_GETS (fpsr);
> +  envp->__fpcr = fpcr;
> +  envp->__fpsr = fpsr;
> +
> +  return 0;
> +}
> +libm_hidden_def (__fegetenv)
> +weak_alias (__fegetenv, fegetenv)
> +libm_hidden_weak (fegetenv)
> diff --git a/sysdeps/arc/fpu/fegetmode.c b/sysdeps/arc/fpu/fegetmode.c
> new file mode 100644
> index 000000000000..1f04c2d745fa
> --- /dev/null
> +++ b/sysdeps/arc/fpu/fegetmode.c
> @@ -0,0 +1,31 @@
> +/* Store current floating-point control modes.
> +   Copyright (C) 2018-2020 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library.  If not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#include <fenv.h>
> +#include <fpu_control.h>
> +
> +int
> +fegetmode (femode_t *modep)
> +{
> +  unsigned int fpcr;
> +
> +  _FPU_GETCW (fpcr);
> +  *modep = fpcr;
> +
> +  return 0;
> +}
> diff --git a/sysdeps/arc/fpu/fegetround.c b/sysdeps/arc/fpu/fegetround.c
> new file mode 100644
> index 000000000000..99d4aeee31b7
> --- /dev/null
> +++ b/sysdeps/arc/fpu/fegetround.c
> @@ -0,0 +1,32 @@
> +/* Return current rounding direction.
> +   Copyright (C) 1998-2020 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library.  If not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#include <fenv.h>
> +#include <fenv_private.h>
> +
> +int
> +__fegetround (void)
> +{
> +  unsigned int fpcr;
> +  _FPU_GETCW (fpcr);
> +
> +  return (fpcr >> __FPU_RND_SHIFT) & __FPU_RND_MASK;
> +}
> +libm_hidden_def (__fegetround)
> +weak_alias (__fegetround, fegetround)
> +libm_hidden_weak (fegetround)
> diff --git a/sysdeps/arc/fpu/feholdexcpt.c b/sysdeps/arc/fpu/feholdexcpt.c
> new file mode 100644
> index 000000000000..4b849a3cf05b
> --- /dev/null
> +++ b/sysdeps/arc/fpu/feholdexcpt.c
> @@ -0,0 +1,43 @@
> +/* Store current floating-point environment and clear exceptions.
> +   Copyright (C) 2000-2020 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library.  If not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#include <fenv.h>
> +#include <fenv_private.h>
> +
> +int
> +__feholdexcept (fenv_t *envp)
> +{
> +  unsigned int fpcr;
> +  unsigned int fpsr;
> +
> +  _FPU_GETCW (fpcr);
> +  _FPU_GETS (fpsr);
> +
> +  envp->__fpcr = fpcr;
> +  envp->__fpsr = fpsr;
> +
> +  fpsr &= ~FE_ALL_EXCEPT;
> +
> +  _FPU_SETCW (fpcr);
> +  _FPU_SETS (fpsr);
> +
> +  return 0;
> +}
> +libm_hidden_def (__feholdexcept)
> +weak_alias (__feholdexcept, feholdexcept)
> +libm_hidden_weak (feholdexcept)
> diff --git a/sysdeps/arc/fpu/fesetenv.c b/sysdeps/arc/fpu/fesetenv.c
> new file mode 100644
> index 000000000000..828b51cf8afa
> --- /dev/null
> +++ b/sysdeps/arc/fpu/fesetenv.c
> @@ -0,0 +1,48 @@
> +/* Install given floating-point environment (doesnot raise exceptions).
> +   Copyright (C) 2018-2020 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library.  If not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#include <fenv.h>
> +#include <fpu_control.h>
> +
> +int
> +__fesetenv (const fenv_t *envp)
> +{
> +  unsigned int fpcr;
> +  unsigned int fpsr;
> +
> +  if (envp == FE_DFL_ENV)
> +    {
> +      fpcr = _FPU_DEFAULT;
> +      fpsr = _FPU_FPSR_DEFAULT;
> +    }
> +  else
> +    {
> +      /* No need to mask out reserved bits as they are IoW.  */
> +      fpcr = envp->__fpcr;
> +      fpsr = envp->__fpsr;
> +    }
> +
> +  _FPU_SETCW (fpcr);
> +  _FPU_SETS (fpsr);
> +
> +  /* Success.  */
> +  return 0;
> +}
> +libm_hidden_def (__fesetenv)
> +weak_alias (__fesetenv, fesetenv)
> +libm_hidden_weak (fesetenv)
> diff --git a/sysdeps/arc/fpu/fesetexcept.c b/sysdeps/arc/fpu/fesetexcept.c
> new file mode 100644
> index 000000000000..0a1bcf763bee
> --- /dev/null
> +++ b/sysdeps/arc/fpu/fesetexcept.c
> @@ -0,0 +1,32 @@
> +/* Set given exception flags.
> +   Copyright (C) 2018-2020 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library.  If not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#include <fenv.h>
> +#include <fpu_control.h>
> +
> +int
> +fesetexcept (int excepts)
> +{
> +  unsigned int fpsr;
> +
> +  _FPU_GETS (fpsr);
> +  fpsr |= excepts;
> +  _FPU_SETS (fpsr);
> +
> +  return 0;
> +}
> diff --git a/sysdeps/arc/fpu/fesetmode.c b/sysdeps/arc/fpu/fesetmode.c
> new file mode 100644
> index 000000000000..2fedaedb9e01
> --- /dev/null
> +++ b/sysdeps/arc/fpu/fesetmode.c
> @@ -0,0 +1,40 @@
> +/* Install given floating-point control modes.
> +   Copyright (C) 2018-2020 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library.  If not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#include <fenv.h>
> +#include <fpu_control.h>
> +
> +int
> +fesetmode (const femode_t *modep)
> +{
> +  unsigned int fpcr;
> +
> +  if (modep == FE_DFL_MODE)
> +    {
> +      fpcr = _FPU_DEFAULT;
> +    }
> +  else
> +    {
> +      /* No need to mask out reserved bits as they are IoW.  */
> +      fpcr = *modep;
> +    }
> +
> +  _FPU_SETCW (fpcr);
> +
> +  return 0;
> +}
> diff --git a/sysdeps/arc/fpu/fesetround.c b/sysdeps/arc/fpu/fesetround.c
> new file mode 100644
> index 000000000000..7a3526112e30
> --- /dev/null
> +++ b/sysdeps/arc/fpu/fesetround.c
> @@ -0,0 +1,40 @@
> +/* Set current rounding direction.
> +   Copyright (C) 1998-2020 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library.  If not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#include <fenv.h>
> +#include <fenv_private.h>
> +
> +int
> +__fesetround (int round)
> +{
> +  unsigned int fpcr;
> +
> +  _FPU_GETCW (fpcr);
> +
> +  if (((fpcr >> __FPU_RND_SHIFT) & __FPU_RND_MASK) != round)
> +    {
> +      fpcr &= ~(__FPU_RND_MASK << __FPU_RND_SHIFT);
> +      fpcr |= (round & __FPU_RND_MASK) << __FPU_RND_SHIFT;
> +      _FPU_SETCW (fpcr);
> +    }
> +
> +  return 0;
> +}
> +libm_hidden_def (__fesetround)
> +weak_alias (__fesetround, fesetround)
> +libm_hidden_weak (fesetround)
> diff --git a/sysdeps/arc/fpu/feupdateenv.c b/sysdeps/arc/fpu/feupdateenv.c
> new file mode 100644
> index 000000000000..f2729e732499
> --- /dev/null
> +++ b/sysdeps/arc/fpu/feupdateenv.c
> @@ -0,0 +1,51 @@
> +/* Install given floating-point environment and raise exceptions,
> +   without clearing currently raised exceptions.
> +   Copyright (C) 2018-2020 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library.  If not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#include <fenv.h>
> +#include <fpu_control.h>
> +
> +int
> +__feupdateenv (const fenv_t *envp)
> +{
> +  unsigned int fpcr;
> +  unsigned int fpsr;
> +
> +  _FPU_GETS (fpsr);
> +
> +  if (envp == FE_DFL_ENV)
> +    {
> +      fpcr = _FPU_DEFAULT;
> +    }
> +  else
> +    {
> +      fpcr = envp->__fpcr;
> +
> +      /* currently raised exceptions need to be preserved.  */
> +      fpsr |= envp->__fpsr;
> +    }
> +
> +  _FPU_SETCW (fpcr);
> +  _FPU_SETS (fpsr);
> +
> +  /* Success.  */
> +  return 0;
> +}
> +libm_hidden_def (__feupdateenv)
> +weak_alias (__feupdateenv, feupdateenv)
> +libm_hidden_weak (feupdateenv)
> diff --git a/sysdeps/arc/fpu/fgetexcptflg.c b/sysdeps/arc/fpu/fgetexcptflg.c
> new file mode 100644
> index 000000000000..9d1423eaeecb
> --- /dev/null
> +++ b/sysdeps/arc/fpu/fgetexcptflg.c
> @@ -0,0 +1,31 @@
> +/* Store current representation for exceptions, ARC version.
> +   Copyright (C) 1998-2020 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library.  If not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#include <fenv.h>
> +#include <fenv_private.h>
> +
> +int
> +fegetexceptflag (fexcept_t *flagp, int excepts)
> +{
> +  unsigned int fpsr;
> +
> +  _FPU_GETS (fpsr);
> +  *flagp = fpsr & excepts;
> +
> +  return 0;
> +}
> diff --git a/sysdeps/arc/fpu/fraiseexcpt.c b/sysdeps/arc/fpu/fraiseexcpt.c
> new file mode 100644
> index 000000000000..9b9d6a951f42
> --- /dev/null
> +++ b/sysdeps/arc/fpu/fraiseexcpt.c
> @@ -0,0 +1,39 @@
> +/* Raise given exceptions.
> +   Copyright (C) 2018-2020 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library.  If not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#include <fenv.h>
> +#include <fpu_control.h>
> +#include <float.h>
> +#include <math.h>
> +
> +int
> +__feraiseexcept (int excepts)
> +{
> +  unsigned int fpsr;
> +
> +  /* currently raised exceptions are not cleared.  */
> +  _FPU_GETS (fpsr);
> +  fpsr |= excepts;
> +
> +  _FPU_SETS (fpsr);
> +
> +  return 0;
> +}
> +libm_hidden_def (__feraiseexcept)
> +weak_alias (__feraiseexcept, feraiseexcept)
> +libm_hidden_weak (feraiseexcept)
> diff --git a/sysdeps/arc/fpu/fsetexcptflg.c b/sysdeps/arc/fpu/fsetexcptflg.c
> new file mode 100644
> index 000000000000..b8e495692145
> --- /dev/null
> +++ b/sysdeps/arc/fpu/fsetexcptflg.c
> @@ -0,0 +1,38 @@
> +/* Set floating-point environment exception handling, ARC version.
> +   Copyright (C) 1998-2020 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library.  If not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#include <fenv.h>
> +#include <fpu_control.h>
> +
> +int
> +fesetexceptflag (const fexcept_t *flagp, int excepts)
> +{
> +  unsigned int fpsr;
> +
> +  _FPU_GETS (fpsr);
> +
> +  /* Clear the bits first.  */
> +  fpsr &= ~excepts;
> +
> +  /* Now set those bits, copying them over from @flagp.  */
> +  fpsr |= *flagp & excepts;
> +
> +  _FPU_SETS (fpsr);
> +
> +  return 0;
> +}
> diff --git a/sysdeps/arc/fpu/ftestexcept.c b/sysdeps/arc/fpu/ftestexcept.c
> new file mode 100644
> index 000000000000..84fd3cf0469c
> --- /dev/null
> +++ b/sysdeps/arc/fpu/ftestexcept.c
> @@ -0,0 +1,33 @@
> +/* Test exception in current environment.
> +   Copyright (C) 2018-2020 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library.  If not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#include <fenv.h>
> +#include <fpu_control.h>
> +#include <fenv_private.h>
> +#include <stdio.h>
> +
> +int
> +fetestexcept (int excepts)
> +{
> +  unsigned int fpsr;
> +
> +  _FPU_GETS (fpsr);
> +
> +  return fpsr & excepts;
> +}
> +libm_hidden_def (fetestexcept)
> diff --git a/sysdeps/arc/fpu/s_fma.c b/sysdeps/arc/fpu/s_fma.c
> new file mode 100644
> index 000000000000..48bb40482dc9
> --- /dev/null
> +++ b/sysdeps/arc/fpu/s_fma.c
> @@ -0,0 +1,28 @@
> +/* Copyright (C) 1996-2020 Free Software Foundation, Inc.
> +
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library; if not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#include <math.h>
> +#include <libm-alias-double.h>
> +
> +double
> +__fma (double x, double y, double z)
> +{
> +  return __builtin_fma (x, y, z);
> +}
> +
> +libm_alias_double (__fma, fma)

Same as for sqrt{f}.

> diff --git a/sysdeps/arc/fpu/s_fmaf.c b/sysdeps/arc/fpu/s_fmaf.c
> new file mode 100644
> index 000000000000..544f32e27aec
> --- /dev/null
> +++ b/sysdeps/arc/fpu/s_fmaf.c
> @@ -0,0 +1,28 @@
> +/* Copyright (C) 2011-2020 Free Software Foundation, Inc.
> +
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public License as
> +   published by the Free Software Foundation; either version 2.1 of the
> +   License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library; if not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#include <math.h>
> +#include <libm-alias-float.h>
> +
> +float
> +__fmaf (float x, float y, float z)
> +{
> +  return __builtin_fmaf (x, y, z);
> +}
> +
> +libm_alias_float (__fma, fma)
> diff --git a/sysdeps/arc/fpu_control.h b/sysdeps/arc/fpu_control.h
> new file mode 100644
> index 000000000000..121656ff7d8c
> --- /dev/null
> +++ b/sysdeps/arc/fpu_control.h
> @@ -0,0 +1,106 @@
> +/* FPU control word bits.  ARC version.
> +   Copyright (C) 2018-2020 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library.  If not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#ifndef _FPU_CONTROL_H
> +#define _FPU_CONTROL_H
> +
> +/* ARC FPU control register bits.
> +
> +  [  0] -> IVE: Enable invalid operation exception.
> +           if 0, soft exception: status register IV flag set.
> +           if 1, hardware exception trap (not supported in Linux yet).
> +  [  1] -> DZE: Enable division by zero exception.
> +           if 0, soft exception: status register IV flag set.
> +           if 1, hardware exception: (not supported in Linux yet).
> +  [9:8] -> RM: Rounding Mode:
> +           00 - Rounding toward zero.
> +           01 - Rounding to nearest (default).
> +           10 - Rounding (up) toward plus infinity.
> +           11 - Rounding (down)toward minus infinity.
> +
> +   ARC FPU status register bits.
> +
> +   [ 0]  -> IV: flag invalid operation.
> +   [ 1]  -> DZ: flag division by zero.
> +   [ 2]  -> OV: flag Overflow operation.
> +   [ 3]  -> UV: flag Underflow operation.
> +   [ 4]  -> IX: flag Inexact operation.
> +   [31]  -> FWE: Flag Write Enable.
> +            If 1, above flags writable explicitly (clearing),
> +            else IoW and only writable indirectly via bits [12:7].  */
> +
> +#include <features.h>
> +
> +#if !defined(__ARC_FPU_SP__) &&  !defined(__ARC_FPU_DP__)
> +
> +# define _FPU_RESERVED 0xffffffff
> +# define _FPU_DEFAULT  0x00000000
> +typedef unsigned int fpu_control_t;
> +# define _FPU_GETCW(cw) (cw) = 0
> +# define _FPU_SETCW(cw) (void) (cw)
> +# define _FPU_GETS(cw) (cw) = 0
> +# define _FPU_SETS(cw) (void) (cw)
> +extern fpu_control_t __fpu_control;
> +
> +#else
> +
> +#define _FPU_RESERVED		0
> +
> +/* The fdlibm code requires strict IEEE double precision arithmetic,
> +   and no interrupts for exceptions, rounding to nearest.
> +   So only RM set to b'01.  */
> +# define _FPU_DEFAULT		0x00000100
> +
> +/* Actually default needs to have FWE bit as 1 but that is already
> +   ingrained into _FPU_SETS macro below.  */
> +#define  _FPU_FPSR_DEFAULT	0x00000000
> +
> +#define __FPU_RND_SHIFT		8
> +#define __FPU_RND_MASK		0x3
> +
> +/* Type of the control word.  */
> +typedef unsigned int fpu_control_t;
> +
> +/* Macros for accessing the hardware control word.  */
> +#  define _FPU_GETCW(cw) __asm__ volatile ("lr %0, [0x300]" : "=r" (cw))
> +#  define _FPU_SETCW(cw) __asm__ volatile ("sr %0, [0x300]" : : "r" (cw))
> +
> +/*  Macros for accessing the hardware status word.
> +    FWE bit is special as it controls if actual status bits could be wrritten
> +    explicitly (other than FPU instructions). We handle it here to keep the
> +    callers agnostic of it:
> +      - clear it out when reporting status bits
> +      - always set it when changing status bits.  */
> +#  define _FPU_GETS(cw)				\
> +    __asm__ volatile ("lr   %0, [0x301]	\r\n" 	\
> +                      "bclr %0, %0, 31	\r\n" 	\
> +                      : "=r" (cw))
> +
> +#  define _FPU_SETS(cw)				\
> +    do {					\
> +      unsigned int __tmp = 0x80000000 | (cw);	\
> +      __asm__ volatile ("sr  %0, [0x301] \r\n" 	\
> +                        : : "r" (__tmp));	\
> +    } while (0)
> +

Although this code follow other architectures, I think it woudl be better
to move forward a macro that emulates function calls and use proper
static inline function instead for _FPU_* (as for get-rounding-mode.h).

> +/* Default control word set at startup.  */
> +extern fpu_control_t __fpu_control;
> +
> +#endif
> +
> +#endif /* fpu_control.h */
> diff --git a/sysdeps/arc/get-rounding-mode.h b/sysdeps/arc/get-rounding-mode.h
> new file mode 100644
> index 000000000000..cfa5c34473ac
> --- /dev/null
> +++ b/sysdeps/arc/get-rounding-mode.h
> @@ -0,0 +1,38 @@
> +/* Determine floating-point rounding mode within libc.  ARC version.
> +   Copyright (C) 1998-2020 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library.  If not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#ifndef _ARC_GET_ROUNDING_MODE_H
> +#define _ARC_GET_ROUNDING_MODE_H	1
> +
> +#include <fenv.h>
> +#include <fpu_control.h>
> +
> +static inline int
> +get_rounding_mode (void)
> +{
> +#if defined(__ARC_FPU_SP__) ||  defined(__ARC_FPU_DP__)
> +  unsigned int fpcr;
> +  _FPU_GETCW (fpcr);
> +
> +  return (fpcr >> __FPU_RND_SHIFT) & __FPU_RND_MASK;
> +#else
> +  return FE_TONEAREST;
> +#endif
> +}
> +
> +#endif /* get-rounding-mode.h */

Ok.

> diff --git a/sysdeps/arc/math-tests-trap.h b/sysdeps/arc/math-tests-trap.h
> new file mode 100644
> index 000000000000..1a3581396573
> --- /dev/null
> +++ b/sysdeps/arc/math-tests-trap.h
> @@ -0,0 +1,27 @@
> +/* Configuration for math tests: support for enabling exception traps.
> +   ARC version.
> +   Copyright (C) 2014-2020 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library; if not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#ifndef ARC_MATH_TESTS_TRAP_H
> +#define ARC_MATH_TESTS_TRAP_H 1
> +
> +/* Trapping exceptions are optional on ARC
> +   and not supported in Linux kernel just yet.  */
> +#define EXCEPTION_ENABLE_SUPPORTED(EXCEPT)	((EXCEPT) == 0)
> +
> +#endif /* math-tests-trap.h.  */

Ok.

> diff --git a/sysdeps/arc/tininess.h b/sysdeps/arc/tininess.h
> new file mode 100644
> index 000000000000..1db37790f881
> --- /dev/null
> +++ b/sysdeps/arc/tininess.h
> @@ -0,0 +1 @@
> +#define TININESS_AFTER_ROUNDING	1
> 

Ok.

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

  reply	other threads:[~2020-05-29 14:12 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-23  1:41 [PATCH v6 00/13] glibc port to ARC processors Vineet Gupta
2020-04-23  1:41 ` [PATCH v6 01/13] ARC: ABI Implementation Vineet Gupta
     [not found]   ` <88508d10-2d29-026a-bb54-ad607154ab87@linaro.org>
2020-05-27 22:15     ` Vineet Gupta
2020-05-29 13:56       ` Adhemerval Zanella
     [not found]     ` <a56a35d4-3e9e-9a88-4be5-8553d5f11ad3@synopsys.com>
     [not found]       ` <87mu5jxkv7.fsf@oldenburg2.str.redhat.com>
2020-06-04 19:01         ` Vineet Gupta
2020-06-04 23:56           ` Vineet Gupta
2020-04-23  1:41 ` [PATCH v6 02/13] ARC: startup and dynamic linking code Vineet Gupta
     [not found]   ` <17957ee6-2bc1-f43b-f184-f0703ba2765f@linaro.org>
2020-05-28  1:14     ` Vineet Gupta
2020-04-23  1:41 ` [PATCH v6 03/13] ARC: Thread Local Storage support Vineet Gupta
     [not found]   ` <4f7a67fb-6f96-57e6-b827-d1ab5dd6733f@linaro.org>
2020-05-28  1:36     ` Vineet Gupta
2020-06-01 18:53       ` Adhemerval Zanella
2020-04-23  1:41 ` [PATCH v6 04/13] ARC: Atomics and Locking primitives Vineet Gupta
     [not found]   ` <03f4a9b3-b1ca-90fa-0b6a-609a3135267d@linaro.org>
2020-04-24  7:23     ` Vineet Gupta
     [not found]     ` <20200427215938.14136-1-vgupta@synopsys.com>
2020-04-27 22:13       ` [PATCH] semaphore: consolidate arch headers into a generic one Vineet Gupta
     [not found]       ` <ac93c301-36d3-b20a-d31c-50c1f3264c68@linaro.org>
2020-05-05 22:59         ` Vineet Gupta
2020-05-08 13:32           ` Adhemerval Zanella
2020-04-23  1:41 ` [PATCH v6 05/13] ARC: math soft float support Vineet Gupta
2020-04-23  1:41 ` [PATCH v6 06/13] ARC: hardware floating point support Vineet Gupta
2020-05-29 14:12   ` Adhemerval Zanella [this message]
2020-05-29 22:28     ` Vineet Gupta
2020-05-29 23:50       ` Vineet Gupta
2020-06-02 17:51         ` Joseph Myers
     [not found]         ` <07887c48-7e07-9f89-035d-3f336a16f2da@synopsys.com>
2020-06-02 18:13           ` static inline math functions (was Re: [PATCH v6 06/13] ARC: hardware floating point support) Joseph Myers
2020-06-02 18:35             ` Adhemerval Zanella
2020-06-05  4:44         ` [PATCH v6 06/13] ARC: hardware floating point support Vineet Gupta
2020-06-05 17:22           ` Adhemerval Zanella
2020-06-02 17:48       ` Joseph Myers
2020-04-23  1:41 ` [PATCH v6 07/13] ARC: Linux Syscall Interface Vineet Gupta
2020-05-29 16:49   ` Adhemerval Zanella
2020-05-30  2:02     ` Vineet Gupta
2020-06-03 19:46     ` Vineet Gupta
2020-06-03 20:04       ` Adhemerval Zanella
2020-06-03 20:17         ` Vineet Gupta
2020-06-04 11:06           ` Adhemerval Zanella
2020-04-23  1:41 ` [PATCH v6 08/13] ARC: Linux ABI Vineet Gupta
2020-04-23  1:41 ` [PATCH v6 09/13] ARC: Linux Startup and Dynamic Loading Vineet Gupta
2020-04-23  1:41 ` [PATCH v6 10/13] ARC: ABI lists Vineet Gupta
2020-04-23  1:41 ` [PATCH v6 11/13] ARC: Build Infrastructure Vineet Gupta
2020-06-03 19:58   ` Adhemerval Zanella
2020-06-04 15:25     ` Vineet Gupta
2020-06-04 17:05       ` Adhemerval Zanella
2020-06-08  4:18         ` Vineet Gupta
2020-04-23  1:41 ` [PATCH v6 12/13] build-many-glibcs.py: Enable ARC builds Vineet Gupta
2020-04-23  1:41 ` [PATCH v6 13/13] Documentation for ARC port Vineet Gupta
2020-05-04 21:21 ` [PATCH v6 00/13] glibc port to ARC processors Vineet Gupta
2020-05-15  0:45   ` Vineet Gupta
2020-05-27  1:49     ` Vineet Gupta
     [not found]       ` <d7f1176c-87c6-90c6-161c-4705a47837ea@linaro.org>
2020-05-27 18:38         ` Vineet Gupta

Reply instructions:

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

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

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

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

  git send-email \
    --in-reply-to=de8975a0-bb03-8cec-be97-56f8c4e2a2f3@linaro.org \
    --to=adhemerval.zanella@linaro.org \
    --cc=Vineet.Gupta1@synopsys.com \
    --cc=libc-alpha@sourceware.org \
    --cc=linux-snps-arc@lists.infradead.org \
    /path/to/YOUR_REPLY

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

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.