From owner-freebsd-questions@FreeBSD.ORG Wed Oct 23 17:42:49 2013 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 825D08E2 for ; Wed, 23 Oct 2013 17:42:49 +0000 (UTC) (envelope-from tg@gmplib.org) Received: from shell.gmplib.org (gmplib-02.nada.kth.se [130.237.222.242]) by mx1.freebsd.org (Postfix) with ESMTP id 4802B2072 for ; Wed, 23 Oct 2013 17:42:48 +0000 (UTC) Received: by shell.gmplib.org (Postfix, from userid 1001) id CE95723794; Wed, 23 Oct 2013 19:42:46 +0200 (CEST) To: freebsd-questions@freebsd.org Subject: Re: MULX on haswell triggers ILLOP References: <86wql4onvy.fsf@shell.gmplib.org> From: Torbjorn Granlund Sender: tg@gmplib.org Date: Wed, 23 Oct 2013 19:42:46 +0200 In-Reply-To: <86wql4onvy.fsf@shell.gmplib.org> (Torbjorn Granlund's message of "Wed\, 23 Oct 2013 02\:02\:25 +0200") Message-ID: <867gd3lw89.fsf@shell.gmplib.org> User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.3 (berkeley-unix) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 23 Oct 2013 17:42:49 -0000 Torbjorn Granlund writes: I have an Intel Haswell system which runs Xen/NetBSD with Debian 7.2, NetBSD 6.1.2 and FreeBSD 9.2 guests. =20=20 The FreeBSD guest casts an ILLOP when fed with the new MULX instruction. This is a plain integer register based instruction which should require zero kernel support. =20=20 MULX is part of the BMI2 extensions. =20=20 The instruction works fine in the other guest systems. =20=20 What is going on? How can FreeBSD reject this instruction? =20=20 I have not tried to run FreeBSD on the bare metal, so I cannot tell if BMI2 works as expected there. It turns out to be another strike of an FreeBSD m4 eval bug. http://www.freebsd.org/cgi/query-pr.cgi?pr=3D166994 Unfortunately, this means that GMP will not work on Haswell CPUs running FreeBSD, where we assemble unsupported instructions using m4 macros. That is a workaround for FreeBSD's seriously outdated binutils. Of course, we could implement a workaround for the m4 bug, but that workaround would be more complex than a bugfix for m4. My hopes that FreeBSD will fix this bug are not high, given that it has been known for 1.5 years. --=20 Torbj=C3=B6rn