10#ifndef EIGEN_TYPE_CASTING_SSE_H
11#define EIGEN_TYPE_CASTING_SSE_H
17#ifndef EIGEN_VECTORIZE_AVX
19struct type_casting_traits<float, int> {
28struct type_casting_traits<int, float> {
63template<> EIGEN_STRONG_INLINE Packet4f pcast<Packet2d, Packet4f>(
const Packet2d& a,
const Packet2d& b) {
64 return _mm_shuffle_ps(_mm_cvtpd_ps(a), _mm_cvtpd_ps(b), (1 << 2) | (1 << 6));
67template<> EIGEN_STRONG_INLINE Packet2d pcast<Packet4f, Packet2d>(
const Packet4f& a) {
69 return _mm_cvtps_pd(a);
72template<> EIGEN_STRONG_INLINE Packet4i preinterpret<Packet4i,Packet4f>(
const Packet4f& a) {
73 return _mm_castps_si128(a);
76template<> EIGEN_STRONG_INLINE Packet4f preinterpret<Packet4f,Packet4i>(
const Packet4i& a) {
77 return _mm_castsi128_ps(a);
80template<> EIGEN_STRONG_INLINE Packet2d preinterpret<Packet2d,Packet4i>(
const Packet4i& a) {
81 return _mm_castsi128_pd(a);
84template<> EIGEN_STRONG_INLINE Packet4i preinterpret<Packet4i,Packet2d>(
const Packet2d& a) {
85 return _mm_castpd_si128(a);
93struct type_casting_traits<
Eigen::half, float> {
101template<> EIGEN_STRONG_INLINE Packet4f pcast<Packet4h, Packet4f>(
const Packet4h& a) {
102 __int64_t a64 = _mm_cvtm64_si64(a.x);
103 Eigen::half h = raw_uint16_to_half(
static_cast<unsigned short>(a64));
104 float f1 =
static_cast<float>(h);
105 h = raw_uint16_to_half(
static_cast<unsigned short>(a64 >> 16));
106 float f2 =
static_cast<float>(h);
107 h = raw_uint16_to_half(
static_cast<unsigned short>(a64 >> 32));
108 float f3 =
static_cast<float>(h);
109 h = raw_uint16_to_half(
static_cast<unsigned short>(a64 >> 48));
110 float f4 =
static_cast<float>(h);
111 return _mm_set_ps(f4, f3, f2, f1);
115struct type_casting_traits<float,
Eigen::half> {
123template<> EIGEN_STRONG_INLINE Packet4h pcast<Packet4f, Packet4h>(
const Packet4f& a) {
124 EIGEN_ALIGN16
float aux[4];
132 result.x = _mm_set_pi16(h3.x, h2.x, h1.x, h0.x);
Base class for all dense matrices, vectors, and expressions.
Definition MatrixBase.h:50
Namespace containing all symbols from the Eigen library.
Definition LDLT.h:16
Definition GenericPacketMath.h:148