diff --git a/Eigen/Core b/Eigen/Core
index b2e973a8c..f2a1ad1d8 100644
--- a/Eigen/Core
+++ b/Eigen/Core
@@ -50,11 +50,12 @@ namespace Eigen {
#include "src/Core/NumTraits.h"
#include "src/Core/MathFunctions.h"
-#include "src/Core/PacketMath.h"
+#include "src/Core/DummyPacketMath.h"
+
#if defined EIGEN_VECTORIZE_SSE
-#include "src/Core/PacketMath_SSE.h"
+#include "src/Core/arch/SSE/PacketMath.h"
#elif defined EIGEN_VECTORIZE_ALTIVEC
-#include "src/Core/PacketMath_Altivec.h"
+#include "src/Core/arch/AltiVec/PacketMath.h"
#endif
#include "src/Core/Functors.h"
diff --git a/Eigen/src/Core/PacketMath.h b/Eigen/src/Core/DummyPacketMath.h
similarity index 95%
rename from Eigen/src/Core/PacketMath.h
rename to Eigen/src/Core/DummyPacketMath.h
index 267192482..b7d418a01 100644
--- a/Eigen/src/Core/PacketMath.h
+++ b/Eigen/src/Core/DummyPacketMath.h
@@ -22,12 +22,8 @@
// License and a copy of the GNU General Public License along with
// Eigen. If not, see .
-#ifndef EIGEN_PACKET_MATH_H
-#define EIGEN_PACKET_MATH_H
-
-#ifndef EIGEN_CACHEFRIENDLY_PRODUCT_THRESHOLD
-#define EIGEN_CACHEFRIENDLY_PRODUCT_THRESHOLD 16
-#endif
+#ifndef EIGEN_DUMMY_PACKET_MATH_H
+#define EIGEN_DUMMY_PACKET_MATH_H
// Default implementation for types not supported by the vectorization.
// In practice these functions are provided to make easier the writting
@@ -76,5 +72,5 @@ template inline Scalar ei_preduxp(const Scalar* vecs) { return
/** \internal \returns the sum of the elements of \a a*/
template inline Scalar ei_predux(const Scalar& a) { return a; }
-#endif // EIGEN_PACKET_MATH_H
+#endif // EIGEN_DUMMY_PACKET_MATH_H
diff --git a/Eigen/src/Core/PacketMath_Altivec.h b/Eigen/src/Core/arch/AltiVec/PacketMath.h
similarity index 97%
rename from Eigen/src/Core/PacketMath_Altivec.h
rename to Eigen/src/Core/arch/AltiVec/PacketMath.h
index 4056c1ddb..aec4e9312 100644
--- a/Eigen/src/Core/PacketMath_Altivec.h
+++ b/Eigen/src/Core/arch/AltiVec/PacketMath.h
@@ -26,11 +26,9 @@
#ifndef EIGEN_PACKET_MATH_ALTIVEC_H
#define EIGEN_PACKET_MATH_ALTIVEC_H
-#ifndef EIGEN_VECTORIZE_ALTIVEC
-#error include PacketMath_Altivec without EIGEN_VECTORIZE_ALTIVEC
-#endif
-
+#ifndef EIGEN_CACHEFRIENDLY_PRODUCT_THRESHOLD
#define EIGEN_CACHEFRIENDLY_PRODUCT_THRESHOLD 4
+#endif
static const vector int v0i = vec_splat_u32(0);
static const vector int v16i_ = vec_splat_u32(-16);
@@ -108,4 +106,3 @@ inline int ei_pfirst(const vector int a)
}
#endif // EIGEN_PACKET_MATH_ALTIVEC_H
-
diff --git a/Eigen/src/Core/PacketMath_SSE.h b/Eigen/src/Core/arch/SSE/PacketMath.h
similarity index 98%
rename from Eigen/src/Core/PacketMath_SSE.h
rename to Eigen/src/Core/arch/SSE/PacketMath.h
index dd467f52a..ffd6aebeb 100644
--- a/Eigen/src/Core/PacketMath_SSE.h
+++ b/Eigen/src/Core/arch/SSE/PacketMath.h
@@ -25,8 +25,8 @@
#ifndef EIGEN_PACKET_MATH_SSE_H
#define EIGEN_PACKET_MATH_SSE_H
-#ifndef EIGEN_VECTORIZE_SSE
-#error include PacketMath_SSE without EIGEN_VECTORIZE_SSE
+#ifndef EIGEN_CACHEFRIENDLY_PRODUCT_THRESHOLD
+#define EIGEN_CACHEFRIENDLY_PRODUCT_THRESHOLD 16
#endif
template<> struct ei_packet_traits { typedef __m128 type; enum {size=4}; };