diff options
author | 2016-02-19 15:16:54 +0000 | |
---|---|---|
committer | 2016-02-19 15:16:54 +0000 | |
commit | dc26459b9910d8c1fda964917635ee8277dd2614 (patch) | |
tree | 3d8d8032fb3ce77a6e8becb2587aec034c851ca4 | |
parent | cd042dbbfdd4680c983d89c4f526c49d4657c05d (diff) |
Implemented protate() for CUDA
-rw-r--r-- | Eigen/src/Core/arch/CUDA/PacketMath.h | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/Eigen/src/Core/arch/CUDA/PacketMath.h b/Eigen/src/Core/arch/CUDA/PacketMath.h index d5dcc7fa3..a32b41e18 100644 --- a/Eigen/src/Core/arch/CUDA/PacketMath.h +++ b/Eigen/src/Core/arch/CUDA/PacketMath.h @@ -272,6 +272,35 @@ template<> EIGEN_DEVICE_FUNC inline double predux_mul<double2>(const double2& a) return a.x * a.y; } +template<size_t offset> +struct protate_impl<offset, float4> +{ + static float4 run(const float4& a) { + if (offset == 0) { + return make_float4(a.x, a.y, a.z, a.w); + } + if (offset == 1) { + return make_float4(a.w, a.x, a.y, a.z); + } + if (offset == 2) { + return make_float4(a.z, a.w, a.x, a.y); + } + return make_float4(a.y, a.z, a.w, a.x); + } +}; + +template<size_t offset> +struct protate_impl<offset, double2> +{ + static double2 run(const double2& a) { + if (offset == 0) { + return make_double2(a.x, a.y); + } + return make_double2(a.y, a.x); + } +}; + + template<> EIGEN_DEVICE_FUNC inline float4 pabs<float4>(const float4& a) { return make_float4(fabsf(a.x), fabsf(a.y), fabsf(a.z), fabsf(a.w)); } |