adds Vector Widening Integer Multiply Instructions

This commit is contained in:
Eyck-Alexander Jentzsch 2025-02-17 15:19:56 +01:00
parent c9b7962cd3
commit 9ba9d2432c

View File

@ -270,9 +270,20 @@ std::function<dest_elem_t(src2_elem_t, src1_elem_t)> get_funct(unsigned funct6,
return static_cast<std::make_signed_t<dest_elem_t>>(static_cast<std::make_signed_t<src2_elem_t>>(vs2) -
static_cast<std::make_signed_t<src1_elem_t>>(vs1));
};
// case 0b111000: // VWMULU
// case 0b111010: // VWMULSU
// case 0b111011: // VWMUL
case 0b111000: // VWMULU
return [](src2_elem_t vs2, src1_elem_t vs1) {
return (static_cast<twice_t<src2_elem_t>>(vs2) * static_cast<twice_t<src2_elem_t>>(vs1));
};
case 0b111010: // VWMULSU
return [](src2_elem_t vs2, src1_elem_t vs1) {
return (static_cast<twice_t<std::make_signed_t<src2_elem_t>>>(static_cast<std::make_signed_t<src2_elem_t>>(vs2)) *
static_cast<twice_t<src2_elem_t>>(vs1));
};
case 0b111011: // VWMUL
return [](src2_elem_t vs2, src1_elem_t vs1) {
return (static_cast<twice_t<std::make_signed_t<src2_elem_t>>>(static_cast<std::make_signed_t<src2_elem_t>>(vs2)) *
static_cast<twice_t<std::make_signed_t<src2_elem_t>>>(static_cast<std::make_signed_t<src1_elem_t>>(vs1)));
};
// case 0b111100: // VWMACCU
// case 0b111101: // VWMACC
// case 0b111110: // VWMACCUS