11#ifndef EIGEN_TYPE_CASTING_RVV10_H
12#define EIGEN_TYPE_CASTING_RVV10_H
15#include "../../InternalHeaderCheck.h"
23struct type_casting_traits<float, numext::int32_t> {
24 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 1 };
28struct type_casting_traits<numext::int32_t, float> {
29 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 1 };
33EIGEN_STRONG_INLINE Packet1Xf pcast<Packet1Xi, Packet1Xf>(
const Packet1Xi& a) {
34 return __riscv_vfcvt_f_x_v_f32m1(a, unpacket_traits<Packet1Xi>::size);
38EIGEN_STRONG_INLINE Packet1Xi pcast<Packet1Xf, Packet1Xi>(
const Packet1Xf& a) {
39 return __riscv_vfcvt_rtz_x_f_v_i32m1(a, unpacket_traits<Packet1Xf>::size);
43EIGEN_STRONG_INLINE Packet1Xf preinterpret<Packet1Xf, Packet1Xi>(
const Packet1Xi& a) {
44 return __riscv_vreinterpret_v_i32m1_f32m1(a);
48EIGEN_STRONG_INLINE Packet1Xi preinterpret<Packet1Xi, Packet1Xf>(
const Packet1Xf& a) {
49 return __riscv_vreinterpret_v_f32m1_i32m1(a);
53EIGEN_STRONG_INLINE Packet4Xf pcast<Packet4Xi, Packet4Xf>(
const Packet4Xi& a) {
54 return __riscv_vfcvt_f_x_v_f32m4(a, unpacket_traits<Packet4Xi>::size);
58EIGEN_STRONG_INLINE Packet4Xi pcast<Packet4Xf, Packet4Xi>(
const Packet4Xf& a) {
59 return __riscv_vfcvt_rtz_x_f_v_i32m4(a, unpacket_traits<Packet4Xf>::size);
63EIGEN_STRONG_INLINE Packet4Xf preinterpret<Packet4Xf, Packet4Xi>(
const Packet4Xi& a) {
64 return __riscv_vreinterpret_v_i32m4_f32m4(a);
68EIGEN_STRONG_INLINE Packet4Xi preinterpret<Packet4Xi, Packet4Xf>(
const Packet4Xf& a) {
69 return __riscv_vreinterpret_v_f32m4_i32m4(a);
73EIGEN_STRONG_INLINE Packet2Xf pcast<Packet2Xi, Packet2Xf>(
const Packet2Xi& a) {
74 return __riscv_vfcvt_f_x_v_f32m2(a, unpacket_traits<Packet2Xi>::size);
78EIGEN_STRONG_INLINE Packet2Xi pcast<Packet2Xf, Packet2Xi>(
const Packet2Xf& a) {
79 return __riscv_vfcvt_rtz_x_f_v_i32m2(a, unpacket_traits<Packet2Xf>::size);
83EIGEN_STRONG_INLINE Packet2Xf preinterpret<Packet2Xf, Packet2Xi>(
const Packet2Xi& a) {
84 return __riscv_vreinterpret_v_i32m2_f32m2(a);
88EIGEN_STRONG_INLINE Packet2Xi preinterpret<Packet2Xi, Packet2Xf>(
const Packet2Xf& a) {
89 return __riscv_vreinterpret_v_f32m2_i32m2(a);
93EIGEN_STRONG_INLINE Packet4Xi pcast<Packet1Xi, Packet4Xi>(
const Packet1Xi& a,
const Packet1Xi& b,
const Packet1Xi& c,
95 return __riscv_vcreate_v_i32m1_i32m4(a, b, c, d);
99EIGEN_STRONG_INLINE Packet4Xf pcast<Packet1Xi, Packet4Xf>(
const Packet1Xi& a,
const Packet1Xi& b,
const Packet1Xi& c,
100 const Packet1Xi& d) {
101 return __riscv_vcreate_v_f32m1_f32m4(__riscv_vfcvt_f_x_v_f32m1(a, unpacket_traits<Packet1Xi>::size),
102 __riscv_vfcvt_f_x_v_f32m1(b, unpacket_traits<Packet1Xi>::size),
103 __riscv_vfcvt_f_x_v_f32m1(c, unpacket_traits<Packet1Xi>::size),
104 __riscv_vfcvt_f_x_v_f32m1(d, unpacket_traits<Packet1Xi>::size));
108EIGEN_STRONG_INLINE Packet4Xf pcast<Packet1Xf, Packet4Xf>(
const Packet1Xf& a,
const Packet1Xf& b,
const Packet1Xf& c,
109 const Packet1Xf& d) {
110 return __riscv_vcreate_v_f32m1_f32m4(a, b, c, d);
114EIGEN_STRONG_INLINE Packet4Xi pcast<Packet1Xf, Packet4Xi>(
const Packet1Xf& a,
const Packet1Xf& b,
const Packet1Xf& c,
115 const Packet1Xf& d) {
116 return __riscv_vcreate_v_i32m1_i32m4(__riscv_vfcvt_rtz_x_f_v_i32m1(a, unpacket_traits<Packet1Xf>::size),
117 __riscv_vfcvt_rtz_x_f_v_i32m1(b, unpacket_traits<Packet1Xf>::size),
118 __riscv_vfcvt_rtz_x_f_v_i32m1(c, unpacket_traits<Packet1Xf>::size),
119 __riscv_vfcvt_rtz_x_f_v_i32m1(d, unpacket_traits<Packet1Xf>::size));
123EIGEN_STRONG_INLINE Packet2Xi pcast<Packet1Xi, Packet2Xi>(
const Packet1Xi& a,
const Packet1Xi& b) {
124 return __riscv_vcreate_v_i32m1_i32m2(a, b);
128EIGEN_STRONG_INLINE Packet2Xf pcast<Packet1Xi, Packet2Xf>(
const Packet1Xi& a,
const Packet1Xi& b) {
129 return __riscv_vcreate_v_f32m1_f32m2(__riscv_vfcvt_f_x_v_f32m1(a, unpacket_traits<Packet1Xi>::size),
130 __riscv_vfcvt_f_x_v_f32m1(b, unpacket_traits<Packet1Xi>::size));
134EIGEN_STRONG_INLINE Packet2Xf pcast<Packet1Xf, Packet2Xf>(
const Packet1Xf& a,
const Packet1Xf& b) {
135 return __riscv_vcreate_v_f32m1_f32m2(a, b);
139EIGEN_STRONG_INLINE Packet2Xi pcast<Packet1Xf, Packet2Xi>(
const Packet1Xf& a,
const Packet1Xf& b) {
140 return __riscv_vcreate_v_i32m1_i32m2(__riscv_vfcvt_rtz_x_f_v_i32m1(a, unpacket_traits<Packet1Xf>::size),
141 __riscv_vfcvt_rtz_x_f_v_i32m1(b, unpacket_traits<Packet1Xf>::size));
147struct type_casting_traits<double, numext::int64_t> {
148 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 1 };
152struct type_casting_traits<numext::int64_t, double> {
153 enum { VectorizedCast = 1, SrcCoeffRatio = 1, TgtCoeffRatio = 1 };
157EIGEN_STRONG_INLINE Packet1Xd pcast<Packet1Xl, Packet1Xd>(
const Packet1Xl& a) {
158 return __riscv_vfcvt_f_x_v_f64m1(a, unpacket_traits<Packet1Xl>::size);
162EIGEN_STRONG_INLINE Packet1Xl pcast<Packet1Xd, Packet1Xl>(
const Packet1Xd& a) {
163 return __riscv_vfcvt_rtz_x_f_v_i64m1(a, unpacket_traits<Packet1Xd>::size);
167EIGEN_STRONG_INLINE Packet1Xd preinterpret<Packet1Xd, Packet1Xl>(
const Packet1Xl& a) {
168 return __riscv_vreinterpret_v_i64m1_f64m1(a);
172EIGEN_STRONG_INLINE Packet1Xl preinterpret<Packet1Xl, Packet1Xd>(
const Packet1Xd& a) {
173 return __riscv_vreinterpret_v_f64m1_i64m1(a);
177EIGEN_STRONG_INLINE Packet4Xd pcast<Packet4Xl, Packet4Xd>(
const Packet4Xl& a) {
178 return __riscv_vfcvt_f_x_v_f64m4(a, unpacket_traits<Packet4Xl>::size);
182EIGEN_STRONG_INLINE Packet4Xl pcast<Packet4Xd, Packet4Xl>(
const Packet4Xd& a) {
183 return __riscv_vfcvt_rtz_x_f_v_i64m4(a, unpacket_traits<Packet4Xd>::size);
187EIGEN_STRONG_INLINE Packet4Xd preinterpret<Packet4Xd, Packet4Xl>(
const Packet4Xl& a) {
188 return __riscv_vreinterpret_v_i64m4_f64m4(a);
192EIGEN_STRONG_INLINE Packet4Xl preinterpret<Packet4Xl, Packet4Xd>(
const Packet4Xd& a) {
193 return __riscv_vreinterpret_v_f64m4_i64m4(a);
197EIGEN_STRONG_INLINE Packet2Xd pcast<Packet2Xl, Packet2Xd>(
const Packet2Xl& a) {
198 return __riscv_vfcvt_f_x_v_f64m2(a, unpacket_traits<Packet2Xl>::size);
202EIGEN_STRONG_INLINE Packet2Xl pcast<Packet2Xd, Packet2Xl>(
const Packet2Xd& a) {
203 return __riscv_vfcvt_rtz_x_f_v_i64m2(a, unpacket_traits<Packet2Xd>::size);
207EIGEN_STRONG_INLINE Packet2Xd preinterpret<Packet2Xd, Packet2Xl>(
const Packet2Xl& a) {
208 return __riscv_vreinterpret_v_i64m2_f64m2(a);
212EIGEN_STRONG_INLINE Packet2Xl preinterpret<Packet2Xl, Packet2Xd>(
const Packet2Xd& a) {
213 return __riscv_vreinterpret_v_f64m2_i64m2(a);
217EIGEN_STRONG_INLINE Packet4Xl pcast<Packet1Xl, Packet4Xl>(
const Packet1Xl& a,
const Packet1Xl& b,
const Packet1Xl& c,
218 const Packet1Xl& d) {
219 return __riscv_vcreate_v_i64m1_i64m4(a, b, c, d);
223EIGEN_STRONG_INLINE Packet4Xd pcast<Packet1Xl, Packet4Xd>(
const Packet1Xl& a,
const Packet1Xl& b,
const Packet1Xl& c,
224 const Packet1Xl& d) {
225 return __riscv_vcreate_v_f64m1_f64m4(__riscv_vfcvt_f_x_v_f64m1(a, unpacket_traits<Packet1Xl>::size),
226 __riscv_vfcvt_f_x_v_f64m1(b, unpacket_traits<Packet1Xl>::size),
227 __riscv_vfcvt_f_x_v_f64m1(c, unpacket_traits<Packet1Xl>::size),
228 __riscv_vfcvt_f_x_v_f64m1(d, unpacket_traits<Packet1Xl>::size));
232EIGEN_STRONG_INLINE Packet4Xd pcast<Packet1Xd, Packet4Xd>(
const Packet1Xd& a,
const Packet1Xd& b,
const Packet1Xd& c,
233 const Packet1Xd& d) {
234 return __riscv_vcreate_v_f64m1_f64m4(a, b, c, d);
238EIGEN_STRONG_INLINE Packet4Xl pcast<Packet1Xd, Packet4Xl>(
const Packet1Xd& a,
const Packet1Xd& b,
const Packet1Xd& c,
239 const Packet1Xd& d) {
240 return __riscv_vcreate_v_i64m1_i64m4(__riscv_vfcvt_rtz_x_f_v_i64m1(a, unpacket_traits<Packet1Xd>::size),
241 __riscv_vfcvt_rtz_x_f_v_i64m1(b, unpacket_traits<Packet1Xd>::size),
242 __riscv_vfcvt_rtz_x_f_v_i64m1(c, unpacket_traits<Packet1Xd>::size),
243 __riscv_vfcvt_rtz_x_f_v_i64m1(d, unpacket_traits<Packet1Xd>::size));
247EIGEN_STRONG_INLINE Packet2Xl pcast<Packet1Xl, Packet2Xl>(
const Packet1Xl& a,
const Packet1Xl& b) {
248 return __riscv_vcreate_v_i64m1_i64m2(a, b);
252EIGEN_STRONG_INLINE Packet2Xd pcast<Packet1Xl, Packet2Xd>(
const Packet1Xl& a,
const Packet1Xl& b) {
253 return __riscv_vcreate_v_f64m1_f64m2(__riscv_vfcvt_f_x_v_f64m1(a, unpacket_traits<Packet1Xl>::size),
254 __riscv_vfcvt_f_x_v_f64m1(b, unpacket_traits<Packet1Xl>::size));
258EIGEN_STRONG_INLINE Packet2Xd pcast<Packet1Xd, Packet2Xd>(
const Packet1Xd& a,
const Packet1Xd& b) {
259 return __riscv_vcreate_v_f64m1_f64m2(a, b);
263EIGEN_STRONG_INLINE Packet2Xl pcast<Packet1Xd, Packet2Xl>(
const Packet1Xd& a,
const Packet1Xd& b) {
264 return __riscv_vcreate_v_i64m1_i64m2(__riscv_vfcvt_rtz_x_f_v_i64m1(a, unpacket_traits<Packet1Xd>::size),
265 __riscv_vfcvt_rtz_x_f_v_i64m1(b, unpacket_traits<Packet1Xd>::size));
271EIGEN_STRONG_INLINE Packet2Xs pcast<Packet1Xs, Packet2Xs>(
const Packet1Xs& a,
const Packet1Xs& b) {
272 return __riscv_vcreate_v_i16m1_i16m2(a, b);
276EIGEN_STRONG_INLINE Packet4Xs pcast<Packet1Xs, Packet4Xs>(
const Packet1Xs& a,
const Packet1Xs& b,
const Packet1Xs& c,
277 const Packet1Xs& d) {
278 return __riscv_vcreate_v_i16m1_i16m4(a, b, c, d);