AVX2: Packet4ul has pmul, abs2
diff --git a/Eigen/src/Core/arch/AVX/PacketMath.h b/Eigen/src/Core/arch/AVX/PacketMath.h
index fc525bf..cca9180 100644
--- a/Eigen/src/Core/arch/AVX/PacketMath.h
+++ b/Eigen/src/Core/arch/AVX/PacketMath.h
@@ -276,8 +276,6 @@
     HasTranspose = 0,
     HasNegate = 0,
     HasSqrt = 0,
-    HasMul = 0,
-    HasAbs2 = 0,
     HasCmp = 1,
     HasShift = 1
   };
@@ -662,6 +660,10 @@
   __m256i high = _mm256_slli_epi64(_mm256_add_epi64(mul1, mul2), 32);
   return _mm256_add_epi64(high, mul3);
 }
+template <>
+EIGEN_STRONG_INLINE Packet4ul pmul<Packet4ul>(const Packet4ul& a, const Packet4ul& b) {
+  return (Packet4ul)pmul<Packet4l>((Packet4l)a, (Packet4l)b);
+}
 #endif
 
 template<> EIGEN_STRONG_INLINE Packet8f pset1<Packet8f>(const float&  from) { return _mm256_set1_ps(from); }
diff --git a/test/array_cwise.cpp b/test/array_cwise.cpp
index 1ddd22b..f437c76 100644
--- a/test/array_cwise.cpp
+++ b/test/array_cwise.cpp
@@ -476,7 +476,7 @@
   // reductions
   VERIFY_IS_APPROX(m1.abs().colwise().sum().sum(), m1.abs().sum());
   VERIFY_IS_APPROX(m1.abs().rowwise().sum().sum(), m1.abs().sum());
-  using std::abs;
+  using numext::abs;
   VERIFY_IS_MUCH_SMALLER_THAN(abs(m1.colwise().sum().sum() - m1.sum()), m1.abs().sum());
   VERIFY_IS_MUCH_SMALLER_THAN(abs(m1.rowwise().sum().sum() - m1.sum()), m1.abs().sum());
   if (!internal::isMuchSmallerThan(abs(m1.sum() - (m1+m2).sum()), m1.abs().sum(), test_precision<Scalar>()))
@@ -587,7 +587,7 @@
 
 template<typename ArrayType> void comparisons(const ArrayType& m)
 {
-  using std::abs;
+  using numext::abs;
   typedef typename ArrayType::Scalar Scalar;
   typedef typename NumTraits<Scalar>::Real RealScalar;
 
@@ -709,7 +709,7 @@
 
 template<typename ArrayType> void array_real(const ArrayType& m)
 {
-  using std::abs;
+  using numext::abs;
   using std::sqrt;
   typedef typename ArrayType::Scalar Scalar;
   typedef typename NumTraits<Scalar>::Real RealScalar;
@@ -1251,7 +1251,8 @@
     CALL_SUBTEST_6( array_integer(Array<Index,Dynamic,Dynamic>(internal::random<int>(1,EIGEN_TEST_MAX_SIZE), internal::random<int>(1,EIGEN_TEST_MAX_SIZE))) );
     CALL_SUBTEST_7( signed_shift_test(ArrayXXi(internal::random<int>(1, EIGEN_TEST_MAX_SIZE), internal::random<int>(1, EIGEN_TEST_MAX_SIZE))));
     CALL_SUBTEST_7( signed_shift_test(Array<Index, Dynamic, Dynamic>(internal::random<int>(1, EIGEN_TEST_MAX_SIZE), internal::random<int>(1, EIGEN_TEST_MAX_SIZE))));
-
+    CALL_SUBTEST_8( array(Array<uint32_t, Dynamic, Dynamic>(internal::random<int>(1, EIGEN_TEST_MAX_SIZE), internal::random<int>(1, EIGEN_TEST_MAX_SIZE))));
+    CALL_SUBTEST_8( array(Array<uint64_t, Dynamic, Dynamic>(internal::random<int>(1, EIGEN_TEST_MAX_SIZE), internal::random<int>(1, EIGEN_TEST_MAX_SIZE))));
   }
   for(int i = 0; i < g_repeat; i++) {
     CALL_SUBTEST_1( comparisons(Array<float, 1, 1>()) );