adds vssrl and vssra

This commit is contained in:
Eyck-Alexander Jentzsch 2025-02-18 23:01:00 +01:00
parent e1911bc450
commit a6f24db83a

View File

@ -588,6 +588,8 @@ void carry_vector_imm_op(uint8_t* V, unsigned funct, uint64_t vl, uint64_t vstar
return;
}
template <typename T> bool get_rounding_increment(T v, uint64_t d, int64_t vxrm) {
if(d == 0)
return 0;
switch(vxrm & 0b11) { // Mask to ensure only lower 2 bits are used
case 0b00: // rnu: round-to-nearest-up (add +0.5 LSB)
return (v >> (d - 1)) & 1;
@ -675,8 +677,16 @@ std::function<bool(uint64_t, vtype_t, dest_elem_t&, src_elem_t, src_elem_t)> get
return 0;
}
};
// case 0b101010: // VSSRL
// case 0b101011: // VSSRA
case 0b101010: // VSSRL
return [](uint64_t vxrm, vtype_t vtype, dest_elem_t& vd, src_elem_t vs2, src_elem_t vs1) {
vd = roundoff(vs2, vs1 & shift_mask<src_elem_t>(), vxrm);
return 0;
};
case 0b101011: // VSSRA
return [](uint64_t vxrm, vtype_t vtype, dest_elem_t& vd, src_elem_t vs2, src_elem_t vs1) {
vd = roundoff(static_cast<std::make_signed_t<src_elem_t>>(vs2), vs1 & shift_mask<src_elem_t>(), vxrm);
return 0;
};
// case 0b101110: // VNCLIPU
// case 0b101111: // VNCLIP
default: