11#ifndef EIGEN_TYPE_CASTING_CLANG_H
12#define EIGEN_TYPE_CASTING_CLANG_H
15#include "../../InternalHeaderCheck.h"
24EIGEN_STRONG_INLINE PacketXf preinterpret<PacketXf, PacketXi>(
const PacketXi& a) {
25 return reinterpret_cast<PacketXf
>(a);
28EIGEN_STRONG_INLINE PacketXi preinterpret<PacketXi, PacketXf>(
const PacketXf& a) {
29 return reinterpret_cast<PacketXi
>(a);
33EIGEN_STRONG_INLINE PacketXd preinterpret<PacketXd, PacketXl>(
const PacketXl& a) {
34 return reinterpret_cast<PacketXd
>(a);
37EIGEN_STRONG_INLINE PacketXl preinterpret<PacketXl, PacketXd>(
const PacketXd& a) {
38 return reinterpret_cast<PacketXl
>(a);
44#if EIGEN_HAS_BUILTIN(__builtin_convertvector)
49EIGEN_STRONG_INLINE PacketXi pcast<PacketXf, PacketXi>(
const PacketXf& a) {
50 const PacketXf safe = a == a ? a : PacketXf(0);
51 return __builtin_convertvector(safe, PacketXi);
54EIGEN_STRONG_INLINE PacketXf pcast<PacketXi, PacketXf>(
const PacketXi& a) {
55 return __builtin_convertvector(a, PacketXf);
59EIGEN_STRONG_INLINE PacketXl pcast<PacketXd, PacketXl>(
const PacketXd& a) {
60 const PacketXd safe = a == a ? a : PacketXd(0);
61 return __builtin_convertvector(safe, PacketXl);
64EIGEN_STRONG_INLINE PacketXd pcast<PacketXl, PacketXd>(
const PacketXl& a) {
65 return __builtin_convertvector(a, PacketXd);
72EIGEN_STRONG_INLINE PacketXd pcast<PacketXf, PacketXd>(
const PacketXf& a) {
73 return __builtin_convertvector(detail::lower_half(a), PacketXd);
77EIGEN_STRONG_INLINE PacketXf pcast<PacketXd, PacketXf>(
const PacketXd& a,
const PacketXd& b) {
78 using HalfFloat = detail::half_vector_t<PacketXf>;
79 return detail::concat_halves<PacketXf>(__builtin_convertvector(a, HalfFloat), __builtin_convertvector(b, HalfFloat));
83EIGEN_STRONG_INLINE PacketXl pcast<PacketXi, PacketXl>(
const PacketXi& a) {
84 return __builtin_convertvector(detail::lower_half(a), PacketXl);
88EIGEN_STRONG_INLINE PacketXi pcast<PacketXl, PacketXi>(
const PacketXl& a,
const PacketXl& b) {
89 using HalfInt = detail::half_vector_t<PacketXi>;
90 return detail::concat_halves<PacketXi>(__builtin_convertvector(a, HalfInt), __builtin_convertvector(b, HalfInt));