@@ -1199,6 +1199,24 @@ namespace xsimd
11991199 /* ****************************************
12001200 * bitwise cast functions implementation *
12011201 *****************************************/
1202+ template <std::size_t in_N, std::size_t out_N>
1203+ batch<uint16_t , out_N> u8_to_u16 (const batch<uint8_t , in_N>& x);
1204+
1205+ template <std::size_t in_N, std::size_t out_N>
1206+ batch<uint8_t , out_N> u16_to_u8 (const batch<uint16_t , in_N>& x);
1207+
1208+ template <std::size_t in_N, std::size_t out_N>
1209+ batch<uint32_t , out_N> u8_to_u32 (const batch<uint8_t , in_N>& x);
1210+
1211+ template <std::size_t in_N, std::size_t out_N>
1212+ batch<uint8_t , out_N> u32_to_u8 (const batch<uint32_t , in_N>& x);
1213+
1214+ template <std::size_t in_N, std::size_t out_N>
1215+ batch<uint64_t , out_N> u8_to_u64 (const batch<uint8_t , in_N>& x);
1216+
1217+ template <std::size_t in_N, std::size_t out_N>
1218+ batch<uint8_t , out_N> u64_to_u8 (const batch<uint64_t , in_N>& x);
1219+
12021220
12031221 template <class T_in , class T_out , std::size_t N_in>
12041222 struct bitwise_cast_impl <batch<T_in, N_in>,
@@ -1221,6 +1239,46 @@ namespace xsimd
12211239 return batch<T_out, N_out>(caster.out );
12221240 }
12231241 };
1242+
1243+ /* **********************************************
1244+ * static_cast conversion by bitwise_cast_impl *
1245+ ***********************************************/
1246+ template <std::size_t in_N, std::size_t out_N>
1247+ inline batch<uint16_t , out_N> u8_to_u16 (const batch<uint8_t , in_N>& x)
1248+ {
1249+ return bitwise_cast_impl<batch<uint8_t , in_N>, batch<uint16_t , out_N>>::run (x);
1250+ }
1251+
1252+ template <std::size_t in_N, std::size_t out_N>
1253+ inline batch<uint8_t , out_N> u16_to_u8 (const batch<uint16_t , in_N>& x)
1254+ {
1255+ return bitwise_cast_impl<batch<uint16_t , in_N>, batch<uint8_t , out_N>>::run (x);
1256+ }
1257+
1258+ template <std::size_t in_N, std::size_t out_N>
1259+ inline batch<uint32_t , out_N> u8_to_u32 (const batch<uint8_t , in_N>& x)
1260+ {
1261+ return bitwise_cast_impl<batch<uint8_t , in_N>, batch<uint32_t , out_N>>::run (x);
1262+ }
1263+
1264+ template <std::size_t in_N, std::size_t out_N>
1265+ inline batch<uint8_t , out_N> u32_to_u8 (const batch<uint32_t , in_N>& x)
1266+ {
1267+ return bitwise_cast_impl<batch<uint32_t , in_N>, batch<uint8_t , out_N>>::run (x);
1268+ }
1269+
1270+ template <std::size_t in_N, std::size_t out_N>
1271+ inline batch<uint64_t , out_N> u8_to_u64 (const batch<uint8_t , in_N>& x)
1272+ {
1273+ return bitwise_cast_impl<batch<uint8_t , in_N>, batch<uint64_t , out_N>>::run (x);
1274+ }
1275+
1276+ template <std::size_t in_N, std::size_t out_N>
1277+ inline batch<uint8_t , out_N> u64_to_u8 (const batch<uint64_t , in_N>& x)
1278+ {
1279+ return bitwise_cast_impl<batch<uint64_t , in_N>, batch<uint8_t , out_N>>::run (x);
1280+ }
1281+
12241282}
12251283
12261284#endif
0 commit comments