Linux SNPS ARC Archive on lore.kernel.org
 help / color / 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 23:50:30 +0000
Message-ID: <5b06914d-acb3-4404-4ff2-93bb7a04f8f5@synopsys.com> (raw)
In-Reply-To: <91c2aba8-bff5-5ddc-7a95-c93c90883150@synopsys.com>

On 5/29/20 3:28 PM, Vineet Gupta via Libc-alpha wrote:
>>> +/* 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 ?

Something like below ?

+# define _FPU_FPSR_FWE		0x80000000
+
-#  define _FPU_GETCW(cw) __asm__ volatile ("lr %0, [0x300]" : "=r" (cw))
-#  define _FPU_SETCW(cw) __asm__ volatile ("sr %0, [0x300]" : : "r" (cw))
+static inline unsigned int arc_fpu_getcw(void)
+{
+  unsigned int cw;
+  __asm__ volatile ("lr %0, [0x300]" : "=r" (cw));
+  return cw;
+}
+
+static inline void arc_fpu_setcw(unsigned int 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)
+      - set it when intending to change status bits.  */
+static inline unsigned int arc_fpu_getsw(void)
+{
+  unsigned int sw;
+  __asm__ volatile ("lr %0, [0x301]" : "=r" (sw));
+  sw &= ~_FPU_FPSR_FWE;
+  return sw;
+}
+
+static inline void arc_fpu_setsw(unsigned int sw)
+{
+  sw |= _FPU_FPSR_FWE;
+  __asm__ volatile ("sr %0, [0x301]" : : "r" (sw));
+}
+
+# define _FPU_GETCW arc_fpu_getcw
+# define _FPU_SETCW arc_fpu_setcw
+# define _FPU_GETS  arc_fpu_getsw
+# define _FPU_SETS  arc_fpu_setsw

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

  reply index

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
2020-05-29 23:50       ` Vineet Gupta [this message]
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=5b06914d-acb3-4404-4ff2-93bb7a04f8f5@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

Linux SNPS ARC Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-snps-arc/0 linux-snps-arc/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-snps-arc linux-snps-arc/ https://lore.kernel.org/linux-snps-arc \
		linux-snps-arc@lists.infradead.org
	public-inbox-index linux-snps-arc

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.infradead.lists.linux-snps-arc


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git