All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vineet Gupta <Vineet.Gupta1@synopsys.com>
To: Adhemerval Zanella <adhemerval.zanella@linaro.org>,
	"libc-alpha@sourceware.org" <libc-alpha@sourceware.org>
Cc: "linux-snps-arc@lists.infradead.org"
	<linux-snps-arc@lists.infradead.org>
Subject: Re: [PATCH v6 06/13] ARC: hardware floating point support
Date: Fri, 29 May 2020 22:28:35 +0000	[thread overview]
Message-ID: <91c2aba8-bff5-5ddc-7a95-c93c90883150@synopsys.com> (raw)
In-Reply-To: <de8975a0-bb03-8cec-be97-56f8c4e2a2f3@linaro.org>

On 5/29/20 7:12 AM, Adhemerval Zanella wrote:
> 
> 
> On 22/04/2020 22:41, Vineet Gupta via Libc-alpha wrote:
>> Signed-off-by: Vineet Gupta <vgupta@synopsys.com>

>> diff --git a/sysdeps/arc/fpu/e_sqrt.c b/sysdeps/arc/fpu/e_sqrt.c
>> +
>> +#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.

Good idea.

Side question: what do s_ / e_ prefixes mean?
The suffix is clear s_roundf (float), s_round (double), s_roundl (128).

>> 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

>> +#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.

OK.

>> diff --git a/sysdeps/arc/fpu/s_fma.c b/sysdeps/arc/fpu/s_fma.c

>> +
>> +#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}.

OK.


>> 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).

OK. do you have a preference for names, existing upper case names 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 22:29 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
2020-05-29 22:28     ` Vineet Gupta [this message]
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=91c2aba8-bff5-5ddc-7a95-c93c90883150@synopsys.com \
    --to=vineet.gupta1@synopsys.com \
    --cc=adhemerval.zanella@linaro.org \
    --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.