MULX on haswell triggers ILLOP

Torbjorn Granlund tg at gmplib.org
Wed Oct 23 17:42:49 UTC 2013


Torbjorn Granlund <tg at gmplib.org> writes:

  I have an Intel Haswell system which runs Xen/NetBSD with Debian 7.2,
  NetBSD 6.1.2 and FreeBSD 9.2 guests.
  
  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.
  
  MULX is part of the BMI2 extensions.
  
  The instruction works fine in the other guest systems.
  
  What is going on?  How can FreeBSD reject this instruction?
  
  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=166994

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.

-- 
Torbjörn


More information about the freebsd-questions mailing list