svn commit: r336633 - in head: lib/libc/riscv/gen sys/riscv/include
Ruslan Bukin
br at FreeBSD.org
Mon Jul 23 09:54:29 UTC 2018
Author: br
Date: Mon Jul 23 09:54:28 2018
New Revision: 336633
URL: https://svnweb.freebsd.org/changeset/base/336633
Log:
Fix setjmp for RISC-V:
o The correct value for _JB_SIGMASK is 27.
o The storage size for double-precision floating
point register is 8 bytes.
Submitted by: "James Clarke" <jrtc4 at cam.ac.uk>
Reviewed by: markj@
Sponsored by: DARPA, AFRL
Differential Revision: https://reviews.freebsd.org/D16344
Modified:
head/lib/libc/riscv/gen/_setjmp.S
head/lib/libc/riscv/gen/setjmp.S
head/sys/riscv/include/setjmp.h
Modified: head/lib/libc/riscv/gen/_setjmp.S
==============================================================================
--- head/lib/libc/riscv/gen/_setjmp.S Mon Jul 23 09:16:23 2018 (r336632)
+++ head/lib/libc/riscv/gen/_setjmp.S Mon Jul 23 09:54:28 2018 (r336633)
@@ -63,19 +63,19 @@ ENTRY(_setjmp)
#if !defined(_STANDALONE) && defined(__riscv_float_abi_double)
/* Store the fpe registers */
- fsd fs0, (0 * 16)(a0)
- fsd fs1, (1 * 16)(a0)
- fsd fs2, (2 * 16)(a0)
- fsd fs3, (3 * 16)(a0)
- fsd fs4, (4 * 16)(a0)
- fsd fs5, (5 * 16)(a0)
- fsd fs6, (6 * 16)(a0)
- fsd fs7, (7 * 16)(a0)
- fsd fs8, (8 * 16)(a0)
- fsd fs9, (9 * 16)(a0)
- fsd fs10, (10 * 16)(a0)
- fsd fs11, (11 * 16)(a0)
- addi a0, a0, (12 * 16)
+ fsd fs0, (0 * 8)(a0)
+ fsd fs1, (1 * 8)(a0)
+ fsd fs2, (2 * 8)(a0)
+ fsd fs3, (3 * 8)(a0)
+ fsd fs4, (4 * 8)(a0)
+ fsd fs5, (5 * 8)(a0)
+ fsd fs6, (6 * 8)(a0)
+ fsd fs7, (7 * 8)(a0)
+ fsd fs8, (8 * 8)(a0)
+ fsd fs9, (9 * 8)(a0)
+ fsd fs10, (10 * 8)(a0)
+ fsd fs11, (11 * 8)(a0)
+ addi a0, a0, (12 * 8)
#endif
/* Return value */
@@ -116,19 +116,19 @@ ENTRY(_longjmp)
#if !defined(_STANDALONE) && defined(__riscv_float_abi_double)
/* Restore the fpe registers */
- fld fs0, (0 * 16)(a0)
- fld fs1, (1 * 16)(a0)
- fld fs2, (2 * 16)(a0)
- fld fs3, (3 * 16)(a0)
- fld fs4, (4 * 16)(a0)
- fld fs5, (5 * 16)(a0)
- fld fs6, (6 * 16)(a0)
- fld fs7, (7 * 16)(a0)
- fld fs8, (8 * 16)(a0)
- fld fs9, (9 * 16)(a0)
- fld fs10, (10 * 16)(a0)
- fld fs11, (11 * 16)(a0)
- addi a0, a0, (12 * 16)
+ fld fs0, (0 * 8)(a0)
+ fld fs1, (1 * 8)(a0)
+ fld fs2, (2 * 8)(a0)
+ fld fs3, (3 * 8)(a0)
+ fld fs4, (4 * 8)(a0)
+ fld fs5, (5 * 8)(a0)
+ fld fs6, (6 * 8)(a0)
+ fld fs7, (7 * 8)(a0)
+ fld fs8, (8 * 8)(a0)
+ fld fs9, (9 * 8)(a0)
+ fld fs10, (10 * 8)(a0)
+ fld fs11, (11 * 8)(a0)
+ addi a0, a0, (12 * 8)
#endif
/* Load the return value */
Modified: head/lib/libc/riscv/gen/setjmp.S
==============================================================================
--- head/lib/libc/riscv/gen/setjmp.S Mon Jul 23 09:16:23 2018 (r336632)
+++ head/lib/libc/riscv/gen/setjmp.S Mon Jul 23 09:54:28 2018 (r336633)
@@ -77,19 +77,19 @@ ENTRY(setjmp)
#ifdef __riscv_float_abi_double
/* Store the fpe registers */
- fsd fs0, (0 * 16)(a0)
- fsd fs1, (1 * 16)(a0)
- fsd fs2, (2 * 16)(a0)
- fsd fs3, (3 * 16)(a0)
- fsd fs4, (4 * 16)(a0)
- fsd fs5, (5 * 16)(a0)
- fsd fs6, (6 * 16)(a0)
- fsd fs7, (7 * 16)(a0)
- fsd fs8, (8 * 16)(a0)
- fsd fs9, (9 * 16)(a0)
- fsd fs10, (10 * 16)(a0)
- fsd fs11, (11 * 16)(a0)
- addi a0, a0, (12 * 16)
+ fsd fs0, (0 * 8)(a0)
+ fsd fs1, (1 * 8)(a0)
+ fsd fs2, (2 * 8)(a0)
+ fsd fs3, (3 * 8)(a0)
+ fsd fs4, (4 * 8)(a0)
+ fsd fs5, (5 * 8)(a0)
+ fsd fs6, (6 * 8)(a0)
+ fsd fs7, (7 * 8)(a0)
+ fsd fs8, (8 * 8)(a0)
+ fsd fs9, (9 * 8)(a0)
+ fsd fs10, (10 * 8)(a0)
+ fsd fs11, (11 * 8)(a0)
+ addi a0, a0, (12 * 8)
#endif
/* Return value */
@@ -146,19 +146,19 @@ ENTRY(longjmp)
#ifdef __riscv_float_abi_double
/* Restore the fpe registers */
- fld fs0, (0 * 16)(a0)
- fld fs1, (1 * 16)(a0)
- fld fs2, (2 * 16)(a0)
- fld fs3, (3 * 16)(a0)
- fld fs4, (4 * 16)(a0)
- fld fs5, (5 * 16)(a0)
- fld fs6, (6 * 16)(a0)
- fld fs7, (7 * 16)(a0)
- fld fs8, (8 * 16)(a0)
- fld fs9, (9 * 16)(a0)
- fld fs10, (10 * 16)(a0)
- fld fs11, (11 * 16)(a0)
- addi a0, a0, (12 * 16)
+ fld fs0, (0 * 8)(a0)
+ fld fs1, (1 * 8)(a0)
+ fld fs2, (2 * 8)(a0)
+ fld fs3, (3 * 8)(a0)
+ fld fs4, (4 * 8)(a0)
+ fld fs5, (5 * 8)(a0)
+ fld fs6, (6 * 8)(a0)
+ fld fs7, (7 * 8)(a0)
+ fld fs8, (8 * 8)(a0)
+ fld fs9, (9 * 8)(a0)
+ fld fs10, (10 * 8)(a0)
+ fld fs11, (11 * 8)(a0)
+ addi a0, a0, (12 * 8)
#endif
/* Load the return value */
Modified: head/sys/riscv/include/setjmp.h
==============================================================================
--- head/sys/riscv/include/setjmp.h Mon Jul 23 09:16:23 2018 (r336632)
+++ head/sys/riscv/include/setjmp.h Mon Jul 23 09:54:28 2018 (r336633)
@@ -40,7 +40,7 @@
#include <sys/cdefs.h>
#define _JBLEN 63 /* sp, ra, [f]s0-11, magic val, sigmask */
-#define _JB_SIGMASK 21
+#define _JB_SIGMASK 27
#ifdef __ASSEMBLER__
#define _JB_MAGIC__SETJMP 0xbe87fd8a2910af00
More information about the svn-src-all
mailing list