fix pow for uint32_t, disable pmul<Packet4ul>
diff --git a/Eigen/src/Core/arch/AVX/PacketMath.h b/Eigen/src/Core/arch/AVX/PacketMath.h
index e4aac9e..d61e548 100644
--- a/Eigen/src/Core/arch/AVX/PacketMath.h
+++ b/Eigen/src/Core/arch/AVX/PacketMath.h
@@ -276,7 +276,7 @@
     HasTranspose = 0,
     HasNegate = 0,
     HasSqrt = 0,
-
+    HasMul = 0,
     HasCmp = 1,
     HasShift = 1
   };
diff --git a/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h b/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h
index be21532..13fafe3 100644
--- a/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h
+++ b/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h
@@ -2152,15 +2152,15 @@
   return result;
 }
 
-template <typename Packet, typename ScalarExponent>
+template <typename Packet, typename ScalarExponent, std::enable_if_t<NumTraits<typename unpacket_traits<Packet>::type>::IsSigned, bool> = true>
 static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet handle_int_int(const Packet& x, const ScalarExponent& exponent) {
   typedef typename unpacket_traits<Packet>::type Scalar;
 
-  // integer base, integer exponent case
+  // signed integer base, integer exponent case
 
   // This routine handles negative and very large positive exponents
   // Signed integer overflow and divide by zero is undefined behavior
-  // Unsigned intgers do not overflow
+  // Unsigned integers do not overflow
 
   const bool exponent_is_odd = unary_pow::is_odd<ScalarExponent>::run(exponent);
 
@@ -2181,6 +2181,31 @@
   result = pselect(pand(pow_is_one, pow_is_neg), pnegate(cst_pos_one), result);
   return result;
 }
+
+template <typename Packet, typename ScalarExponent, std::enable_if_t<!NumTraits<typename unpacket_traits<Packet>::type>::IsSigned, bool> = true>
+static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet handle_int_int(const Packet& x, const ScalarExponent& exponent) {
+  typedef typename unpacket_traits<Packet>::type Scalar;
+
+  // unsigned integer base, integer exponent case
+
+  // This routine handles negative and very large positive exponents
+  // Signed integer overflow and divide by zero is undefined behavior
+  // Unsigned integers do not overflow
+
+  const Scalar zero = Scalar(0);
+  const Scalar pos_one = Scalar(1);
+
+  const Packet cst_zero = pset1<Packet>(zero);
+  const Packet cst_pos_one = pset1<Packet>(pos_one);
+
+  const Packet pow_is_zero = exponent < 0 ? pcmp_lt(cst_pos_one, x) : pzero(x);
+  const Packet pow_is_one = pcmp_eq(cst_pos_one, x);
+
+  Packet result = pselect(pow_is_zero, cst_zero, x);
+  result = pselect(pow_is_one, cst_pos_one, result);
+  return result;
+}
+
 }  // end namespace unary_pow
 
 template <typename Packet, typename ScalarExponent,