svn commit: r308251 - in head: lib/libcompiler_rt lib/msun/riscv share/man/man7 share/mk sys/modules/dtrace/dtrace sys/riscv/include

Ruslan Bukin br at FreeBSD.org
Thu Nov 3 13:06:20 UTC 2016


Author: br
Date: Thu Nov  3 13:06:17 2016
New Revision: 308251
URL: https://svnweb.freebsd.org/changeset/base/308251

Log:
  o Add support for long double.
  o Add support for latest RISC-V GNU toolchain.
  
  Sponsored by:	DARPA, AFRL
  Sponsored by:	HEIF5

Modified:
  head/lib/libcompiler_rt/Makefile.inc
  head/lib/msun/riscv/Makefile.inc
  head/share/man/man7/arch.7
  head/share/mk/bsd.cpu.mk
  head/share/mk/bsd.stand.mk
  head/sys/modules/dtrace/dtrace/Makefile
  head/sys/riscv/include/asm.h
  head/sys/riscv/include/float.h

Modified: head/lib/libcompiler_rt/Makefile.inc
==============================================================================
--- head/lib/libcompiler_rt/Makefile.inc	Thu Nov  3 10:11:59 2016	(r308250)
+++ head/lib/libcompiler_rt/Makefile.inc	Thu Nov  3 13:06:17 2016	(r308251)
@@ -123,8 +123,11 @@ SRCF+=		udivti3
 SRCF+=		umoddi3
 SRCF+=		umodti3
 
-# 128-bit quad precision long double support, only used on arm64
-.if ${MACHINE_CPUARCH} == "aarch64"
+#
+# 128-bit quad precision long double support,
+# only used on arm64 and riscv.
+#
+.if ${MACHINE_CPUARCH} == "aarch64" || ${MACHINE_CPUARCH} == "riscv"
 SRCF+=		addtf3
 SRCF+=		comparetf2
 SRCF+=		divtf3

Modified: head/lib/msun/riscv/Makefile.inc
==============================================================================
--- head/lib/msun/riscv/Makefile.inc	Thu Nov  3 10:11:59 2016	(r308250)
+++ head/lib/msun/riscv/Makefile.inc	Thu Nov  3 13:06:17 2016	(r308251)
@@ -1,6 +1,3 @@
 # $FreeBSD$
 
-# RISCVTODO: should be 113
-# compilation problems: gcc generates bltuz instruction, which is not exists
-
-LDBL_PREC = 53
+LDBL_PREC = 113

Modified: head/share/man/man7/arch.7
==============================================================================
--- head/share/man/man7/arch.7	Thu Nov  3 10:11:59 2016	(r308250)
+++ head/share/man/man7/arch.7	Thu Nov  3 13:06:17 2016	(r308251)
@@ -66,7 +66,7 @@ On all supported architectures,
 .It mips64hf    Ta 8 Ta  8
 .It powerpc     Ta 4 Ta  8
 .It powerpc64   Ta 8 Ta  8
-.It riscv       Ta 8 Ta
+.It riscv       Ta 8 Ta 16
 .It sparc64     Ta 8 Ta 16
 .El
 .Ss Endianness and Char Signedness

Modified: head/share/mk/bsd.cpu.mk
==============================================================================
--- head/share/mk/bsd.cpu.mk	Thu Nov  3 10:11:59 2016	(r308250)
+++ head/share/mk/bsd.cpu.mk	Thu Nov  3 13:06:17 2016	(r308251)
@@ -156,7 +156,7 @@ _CPUCFLAGS = -march=${CPUTYPE}
 _CPUCFLAGS = -march=${CPUTYPE:S/^mips//}
 . endif
 . elif ${MACHINE_CPUARCH} == "riscv"
-_CPUCFLAGS = -msoft-float # -march="RV64I" # RISCVTODO
+_CPUCFLAGS = -mno-float -march="IMAFD"
 . elif ${MACHINE_ARCH} == "sparc64"
 .  if ${CPUTYPE} == "v9"
 _CPUCFLAGS = -mcpu=v9
@@ -337,8 +337,8 @@ CFLAGS += -mcpu=8540 -Wa,-me500 -mspe=ye
 .endif
 
 .if ${MACHINE_CPUARCH} == "riscv"
-CFLAGS += -msoft-float
-ACFLAGS += -msoft-float
+CFLAGS += -mno-float
+ACFLAGS += -mno-float
 .endif
 
 # NB: COPTFLAGS is handled in /usr/src/sys/conf/kern.pre.mk

Modified: head/share/mk/bsd.stand.mk
==============================================================================
--- head/share/mk/bsd.stand.mk	Thu Nov  3 10:11:59 2016	(r308250)
+++ head/share/mk/bsd.stand.mk	Thu Nov  3 13:06:17 2016	(r308251)
@@ -5,7 +5,12 @@
 #
 
 CFLAGS+= -ffreestanding -Wformat
-CFLAGS+= ${CFLAGS_NO_SIMD} -msoft-float -D_STANDALONE
+CFLAGS+= ${CFLAGS_NO_SIMD} -D_STANDALONE
+.if ${MACHINE_CPUARCH} == "riscv"
+CFLAGS+=	-mno-float
+.else
+CFLAGS+=	-msoft-float
+.endif
 
 .if ${MACHINE_CPUARCH} == "i386"
 CFLAGS.gcc+=	-mpreferred-stack-boundary=2

Modified: head/sys/modules/dtrace/dtrace/Makefile
==============================================================================
--- head/sys/modules/dtrace/dtrace/Makefile	Thu Nov  3 10:11:59 2016	(r308250)
+++ head/sys/modules/dtrace/dtrace/Makefile	Thu Nov  3 13:06:17 2016	(r308251)
@@ -60,7 +60,7 @@ assym.o: assym.s
 
 .if ${MACHINE_CPUARCH} == "riscv"
 assym.o: assym.s
-	${AS} -msoft-float -o assym.o assym.s
+	${AS} -mfloat-abi=soft -o assym.o assym.s
 .endif
 
 .include <bsd.kmod.mk>

Modified: head/sys/riscv/include/asm.h
==============================================================================
--- head/sys/riscv/include/asm.h	Thu Nov  3 10:11:59 2016	(r308250)
+++ head/sys/riscv/include/asm.h	Thu Nov  3 13:06:17 2016	(r308251)
@@ -47,7 +47,7 @@
 #define	_C_LABEL(x)	x
 
 #define	ENTRY(sym)						\
-	.text; .globl sym; .type sym, at function; .align 2; sym:
+	.text; .globl sym; .type sym, at function; .align 4; sym:
 #define	END(sym) .size sym, . - sym
 
 #define	EENTRY(sym)						\

Modified: head/sys/riscv/include/float.h
==============================================================================
--- head/sys/riscv/include/float.h	Thu Nov  3 10:11:59 2016	(r308250)
+++ head/sys/riscv/include/float.h	Thu Nov  3 13:06:17 2016	(r308251)
@@ -76,22 +76,6 @@ __END_DECLS
 #define	DBL_HAS_SUBNORM	1
 #endif /* __ISO_C_VISIBLE >= 2011 */
 
-#define LDBL_MANT_DIG	DBL_MANT_DIG
-#define LDBL_EPSILON	((long double)DBL_EPSILON)
-#define LDBL_DIG	DBL_DIG
-#define LDBL_MIN_EXP	DBL_MIN_EXP
-#define LDBL_MIN	((long double)DBL_MIN)
-#define LDBL_MIN_10_EXP	DBL_MIN_10_EXP
-#define LDBL_MAX_EXP	DBL_MAX_EXP
-#define LDBL_MAX	((long double)DBL_MAX)
-#define LDBL_MAX_10_EXP	DBL_MAX_10_EXP
-#if __ISO_C_VISIBLE >= 2011
-#define	LDBL_TRUE_MIN	((long double)DBL_TRUE_MIN)
-#define	LDBL_DECIMAL_DIG DBL_DECIMAL_DIG
-#define	LDBL_HAS_SUBNORM DBL_HAS_SUBNORM
-#endif /* __ISO_C_VISIBLE >= 2011 */
-
-#if 0 /* RISCVTODO */
 #define	LDBL_MANT_DIG	113
 #define	LDBL_EPSILON	1.925929944387235853055977942584927319E-34L
 #define	LDBL_DIG	33
@@ -106,6 +90,5 @@ __END_DECLS
 #define	LDBL_DECIMAL_DIG 36
 #define	LDBL_HAS_SUBNORM 1
 #endif /* __ISO_C_VISIBLE >= 2011 */
-#endif
 
 #endif /* _MACHINE_FLOAT_H_ */


More information about the svn-src-head mailing list