diff --git a/include/xsimd/types/xsimd_rvv_register.hpp b/include/xsimd/types/xsimd_rvv_register.hpp index 70d760e23..5a704e9e6 100644 --- a/include/xsimd/types/xsimd_rvv_register.hpp +++ b/include/xsimd/types/xsimd_rvv_register.hpp @@ -95,10 +95,10 @@ namespace xsimd } \ template <> \ XSIMD_INLINE type bitcast(type x) noexcept { return x; } \ - static XSIMD_INLINE byte_type as_bytes(type x) noexcept \ + template \ + static XSIMD_INLINE byte_type as_bytes(U x) noexcept \ { \ - const auto words = XSIMD_RVV_JOINT5(__riscv_vreinterpret_, u, s, m, vmul)(x); \ - return XSIMD_RVV_JOINT5(__riscv_vreinterpret_, u, 8, m, vmul)(words); \ + return XSIMD_RVV_JOINT5(__riscv_vreinterpret_, u, 8, m, vmul)(x); \ } \ }; @@ -133,6 +133,18 @@ namespace xsimd { return __riscv_vreinterpret_i8m8(x); } + template <> + XSIMD_INLINE rvv_type_info::byte_type + rvv_type_info::as_bytes<__rvv_int8m8_t>(__rvv_int8m8_t x) noexcept + { + return __riscv_vreinterpret_u8m8(x); + } + template <> + XSIMD_INLINE rvv_type_info::byte_type + rvv_type_info::as_bytes<__rvv_uint32m1_t>(__rvv_uint32m1_t x) noexcept + { + return __riscv_vreinterpret_u8m1(x); + } // rvv_blob is storage-type abstraction for a vector register. template