state.sv().srcoffs = std::min(srcoffs , state.sv().vl-1);
state.sv().destoffs = std::min(destoffs, state.sv().vl-1);
// decode (and limit) src/dest SUBVL offsets
- reg_t subsrcoffs = get_field(val, SV_STATE_SSVOFFS);
reg_t subdestoffs = get_field(val, SV_STATE_DSVOFFS);
- state.sv().ssvoffs = std::min(subsrcoffs , state.sv().subvl-1);
state.sv().dsvoffs = std::min(subdestoffs, state.sv().subvl-1);
//int state_bank = get_field(val, SV_STATE_BANK);
//int state_size = get_field(val, SV_STATE_SIZE);
(state.sv().srcoffs<<12) |
(state.sv().destoffs<<18) |
((std::max((int)state.sv().subvl, 1)-1)<<24) |
- (state.sv().ssvoffs<<26) |
- (state.sv().dsvoffs<<28);
+ (state.sv().dsvoffs<<26);
case CSR_SV_MVL:
return state.sv().mvl;
case CSR_SV_SUBVL:
// subvector loop
uint64_t subvl;
- int dsvoffs; // destination sub-loop element offset
- int ssvoffs; // source sub-loop element offset (used in twin-predication)
+ int dsvoffs; // sub-loop element offset
int state_size;
int state_bank;
#define SV_STATE_SRCOFFS (0x1f<<12)
#define SV_STATE_DESTOFFS (0x1f<<18)
#define SV_STATE_SUBVL (0x3<<24)
-#define SV_STATE_SSVOFFS (0x3<<26)
-#define SV_STATE_DSVOFFS (0x3<<28)
+#define SV_STATE_DSVOFFS (0x3<<26)
#define SV_CFG_BANK (0x7)
#define SV_CFG_SIZE (0x3<<3)