adds explicit RFS to assertions

This commit is contained in:
Eyck-Alexander Jentzsch 2025-02-03 20:39:15 +01:00
parent 947d353bbf
commit 6f4daf91ed

View File

@ -44,6 +44,7 @@
#include <nonstd/variant.hpp>
namespace softvector {
unsigned RFS = 32;
bool softvec_read(void* core, uint64_t addr, uint64_t length, uint8_t* data) {
iss::status status = static_cast<iss::arch_if*>(core)->read(iss::address_type::PHYSICAL, iss::access_type::READ,
@ -108,7 +109,7 @@ uint64_t vector_load_store(void* core, std::function<bool(void*, uint64_t, uint6
for(unsigned s_idx = 0; s_idx < segment_size; s_idx++) {
// base + selected vd + current_elem + current_segment
uint8_t* dest_elem = V + (vd * VLEN / 8) + (eew / 8 * idx) + (VLEN / 8 * s_idx * emul_stride);
assert(dest_elem <= V + VLEN * 32 / 8);
assert(dest_elem <= V + VLEN * RFS / 8);
if(mask_active) {
uint64_t addr = base_addr + (eew / 8) * (idx * segment_size + s_idx) * stride;
if(!load_store_fn(core, addr, eew / 8, dest_elem))
@ -126,7 +127,7 @@ uint64_t vector_load_store(void* core, std::function<bool(void*, uint64_t, uint6
for(unsigned s_idx = 0; s_idx < segment_size; s_idx++) {
// base + selected vd + current_elem + current_segment
uint8_t* dest_elem = V + (vd * VLEN / 8) + (eew / 8 * idx) + (VLEN / 8 * s_idx * emul_stride);
assert(dest_elem <= V + VLEN * 32 / 8);
assert(dest_elem <= V + VLEN * RFS / 8);
// this only updates the first 8 bits, so eew > 8 would not work correctly
*dest_elem = vtype.vta() ? *dest_elem : *dest_elem;
}