Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 5 Sep 2017 16:59:19 +0000 (UTC)
From:      Dimitry Andric <dim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r323187 - stable/11/lib/libcompiler_rt
Message-ID:  <201709051659.v85GxJKT058602@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dim
Date: Tue Sep  5 16:59:19 2017
New Revision: 323187
URL: https://svnweb.freebsd.org/changeset/base/323187

Log:
  MFC r323001:
  
  In compiler-rt, a few assembler implementations for i386 floating point
  conversion functions use SSE2 instructions, but these are not guarded by
  #ifdef __SSE2__, and there is no implementation using general purpose
  registers.  For these functions, use the generic C variants instead,
  otherwise they will cause SIGILL on older processors.
  
  Reported by:	bsdpr@phoe.frmug.org
  PR:		221733

Modified:
  stable/11/lib/libcompiler_rt/Makefile.inc
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/lib/libcompiler_rt/Makefile.inc
==============================================================================
--- stable/11/lib/libcompiler_rt/Makefile.inc	Tue Sep  5 15:21:34 2017	(r323186)
+++ stable/11/lib/libcompiler_rt/Makefile.inc	Tue Sep  5 16:59:19 2017	(r323187)
@@ -55,18 +55,12 @@ SRCF+=		fixunsxfsi
 SRCF+=		fixunsxfti
 SRCF+=		fixxfdi
 SRCF+=		fixxfti
-SRCF+=		floatdidf
-SRCF+=		floatdisf
 SRCF+=		floatditf
-SRCF+=		floatdixf
 SRCF+=		floatsitf
 SRCF+=		floattidf
 SRCF+=		floattisf
 SRCF+=		floattixf
-SRCF+=		floatundidf
-SRCF+=		floatundisf
 SRCF+=		floatunditf
-SRCF+=		floatundixf
 SRCF+=		floatunsidf
 SRCF+=		floatunsisf
 SRCF+=		floatuntidf
@@ -122,6 +116,23 @@ SRCF+=		udivmodti4
 SRCF+=		udivti3
 SRCF+=		umoddi3
 SRCF+=		umodti3
+
+# Avoid using SSE2 instructions on i386.
+.if ${MACHINE_CPUARCH} == "i386"
+SRCS+=		floatdidf.c
+SRCS+=		floatdisf.c
+SRCS+=		floatdixf.c
+SRCS+=		floatundidf.c
+SRCS+=		floatundisf.c
+SRCS+=		floatundixf.c
+.else
+SRCF+=		floatdidf
+SRCF+=		floatdisf
+SRCF+=		floatdixf
+SRCF+=		floatundidf
+SRCF+=		floatundisf
+SRCF+=		floatundixf
+.endif
 
 # __cpu_model support, only used on x86
 .if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386"



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201709051659.v85GxJKT058602>