adds vssrl and vssra
This commit is contained in:
parent
e1911bc450
commit
a6f24db83a
@ -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:
|
||||
|
Loading…
x
Reference in New Issue
Block a user