Module Name: src
Committed By: riastradh
Date: Tue May 14 15:17:57 UTC 2024
Modified Files:
src/sys/arch/riscv/include: sysreg.h
Log Message:
riscv: No volatile needed on asm to _read_ rounding mode, exceptions.
These instructions can be omitted if the return values are unused.
In contrast, _writes_ to the rounding mode or exceptions must not be
omitted (even if we ignore the return value, which is the old value
of the field).
I think "memory" is the wrong clobber on these asm blocks too; they
can't be reordered around _floating-point_ instructions, while
reordering around loads and stores is fine. But I don't know how to
spell the right thing in gcclish.
To generate a diff of this commit:
cvs rdiff -u -r1.32 -r1.33 src/sys/arch/riscv/include/sysreg.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/riscv/include/sysreg.h
diff -u src/sys/arch/riscv/include/sysreg.h:1.32 src/sys/arch/riscv/include/sysreg.h:1.33
--- src/sys/arch/riscv/include/sysreg.h:1.32 Tue May 14 15:16:51 2024
+++ src/sys/arch/riscv/include/sysreg.h Tue May 14 15:17:57 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: sysreg.h,v 1.32 2024/05/14 15:16:51 riastradh Exp $ */
+/* $NetBSD: sysreg.h,v 1.33 2024/05/14 15:17:57 riastradh Exp $ */
/*
* Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -57,7 +57,7 @@ static inline uint32_t
fcsr_read(void)
{
uint32_t __fcsr;
- asm volatile("frcsr %0" : "=r"(__fcsr) :: "memory");
+ asm("frcsr %0" : "=r"(__fcsr) :: "memory");
return __fcsr;
}
@@ -73,7 +73,7 @@ static inline uint32_t
fcsr_fflags_read(void)
{
uint32_t __old;
- asm volatile("frflags %0" : "=r"(__old) :: "memory");
+ asm("frflags %0" : "=r"(__old) :: "memory");
return __old;
}
@@ -89,7 +89,7 @@ static inline uint32_t
fcsr_frm_read(void)
{
uint32_t __old;
- asm volatile("frrm\t%0" : "=r"(__old) :: "memory");
+ asm("frrm\t%0" : "=r"(__old) :: "memory");
return __old;
}