diff --git a/var/spack/repos/builtin/packages/netlib-lapack/package.py b/var/spack/repos/builtin/packages/netlib-lapack/package.py
index 5fbc5e14e164859e0e07028f56713238acb7e355..e782799988615a65271b3c6497cd09d380852443 100644
--- a/var/spack/repos/builtin/packages/netlib-lapack/package.py
+++ b/var/spack/repos/builtin/packages/netlib-lapack/package.py
@@ -55,6 +55,8 @@ class NetlibLapack(Package):
 
     variant('lapacke', default=True,
             description='Activates the build of the LAPACKE C interface')
+    variant('xblas', default=False,
+            description='Builds extended precision routines using XBLAS')
 
     patch('ibm-xl.patch', when='@3:6%xl')
     patch('ibm-xl.patch', when='@3:6%xl_r')
@@ -65,6 +67,7 @@ class NetlibLapack(Package):
 
     depends_on('cmake', type='build')
     depends_on('blas', when='+external-blas')
+    depends_on('netlib-xblas+fortran+plain_blas', when='+xblas')
 
     def patch(self):
         # Fix cblas CMakeLists.txt -- has wrong case for subdirectory name.
@@ -155,6 +158,13 @@ def install_one(self, spec, prefix, shared):
                 '-DBLAS_LIBRARIES:PATH=%s' % spec['blas'].libs.joined(';')
             ])
 
+        if spec.satisfies('+xblas'):
+            xblas_include_dir = spec['netlib-xblas'].prefix.include
+            xblas_library = spec['netlib-xblas'].libs.joined(';')
+            cmake_args.extend([
+                '-DXBLAS_INCLUDE_DIR={0}'.format(xblas_include_dir),
+                '-DXBLAS_LIBRARY={0}'.format(xblas_library)])
+
         cmake_args.extend(std_cmake_args)
 
         build_dir = 'spack-build' + ('-shared' if shared else '-static')
diff --git a/var/spack/repos/builtin/packages/netlib-xblas/package.py b/var/spack/repos/builtin/packages/netlib-xblas/package.py
new file mode 100644
index 0000000000000000000000000000000000000000..cde2a94658767c6f4b1cb52c3799f0fe0acb05f2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/netlib-xblas/package.py
@@ -0,0 +1,90 @@
+##############################################################################
+# Copyright (c) 2013-2017, Lawrence Livermore National Security, LLC.
+# Produced at the Lawrence Livermore National Laboratory.
+#
+# This file is part of Spack.
+# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
+# LLNL-CODE-647188
+#
+# For details, see https://github.com/spack/spack
+# Please also see the NOTICE and LICENSE files for our notice and the LGPL.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License (as
+# published by the Free Software Foundation) version 2.1, February 1999.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
+# conditions of the GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+##############################################################################
+from spack import *
+
+
+class NetlibXblas(AutotoolsPackage):
+    """XBLAS is a reference implementation for extra precision BLAS.
+
+       XBLAS is a reference implementation for the dense and banded BLAS
+       routines, along with extended and mixed precision version. Extended
+       precision is only used internally; input and output arguments remain
+       the same as in the existing BLAS. Extra precisions is implemented as
+       double-double (i.e., 128-bit total, 106-bit significand). Mixed
+       precision permits some input/output arguments of different types
+       (mixing real and complex) or precisions (mixing single and
+       double). This implementation is proof of concept, and no attempt was
+       made to optimize performance; performance should be as good as
+       straightforward but careful code written by hand."""
+
+    homepage = "http://www.netlib.org/xblas"
+    url      = "http://www.netlib.org/xblas/xblas.tar.gz"
+
+    version('1.0.248', '990c680fb5e446bb86c10936e4cd7f88')
+
+    variant('fortran', default=True,
+            description='Build Fortran interfaces')
+    variant('plain_blas', default=True,
+            description='As part of XBLAS, build plain BLAS routines')
+
+    provides('blas', when='+plain_blas')
+
+    @property
+    def libs(self):
+        return find_libraries(['libxblas'], root=self.prefix,
+                              shared=False, recurse=True)
+
+    def configure_args(self):
+        args = []
+
+        if self.spec.satisfies('~fortran'):
+            args += ['--disable-fortran']
+
+        if self.spec.satisfies('~plain_blas'):
+            args += ['--disable-plain-blas']
+
+        return args
+
+    def install(self, spec, prefix):
+        mkdirp(prefix.lib)
+        install('libxblas.a', prefix.lib)
+
+        if self.spec.satisfies('+plain_blas'):
+            # XBLAS should be a drop-in BLAS replacement
+            install('libxblas.a', join_path(prefix.lib, 'libblas.a'))
+
+        headers = ['f2c-bridge.h',
+                   'blas_dense_proto.h',
+                   'blas_enum.h',
+                   'blas_extended.h',
+                   'blas_extended_private.h',
+                   'blas_extended_proto.h',
+                   'blas_fpu.h',
+                   'blas_malloc.h']
+        mkdirp(prefix.include)
+        for h in headers:
+            install(join_path('src', h), prefix.include)
+
+        return